J'apprends des pointeurs et des références, et ma question fait référence à Cette explication, en particulier la section suivante: p>
p>
Ceci suggère que la déclaration Pour tester cette théorie, j'ai écrit un cas simple, le résultat observé ci-dessous: P>
p>
Je suis perplexe par le fait que Le document est-il correct ou avez-moi oublié quelque chose? P> int & ri = i code> crée une nouvelle cellule de mémoire, qui a une valeur de
& i code> et existe dans l'emplacement de mémoire inconnu. P>
r code> et
i code> a la même adresse mémoire, ce qui semble contredire les lectures. Le résultat suggère que
int & ri = i code> signifie "Créer un alias pour cellule mémoire
i code> et appelez-le
r code>" tel que les deux se réfèrent à exactement la même cellule. P>
5 Réponses :
puisque (Notez que les références de non-références ont la propriété de ne pas être «référencée» après déclarées - elles font toujours référence à la même chose - il n'ya donc aucun moyen d'écrire des opérations qui fonctionnent «sur la référence», non ce qui est référencé ') p> r code> est une référence à
i code>, toutes les opérations sur
r code> sont transformées par le compilateur en opérations sur
i code>. Donc, ce que
& r code> vous donne l'adresse mémoire
i code> est dans. P>
Serait-il possible d'obtenir l'emplacement de la mémoire de r code>?
@JEDIII Il n'est pas possible de même poser la question. Il n'y a aucune garantie qu'une référence a une adresse du tout, elle peut être optimisée par le compilateur (contrairement à un pointeur qui doit être quelque part)
Le document dit "PI et RI contiennent des adresses qui pointent sur l'emplacement de I, mais la différence réside dans l'apparition entre les références et les pointeurs lorsqu'ils sont utilisés dans des expressions. ", qui est vrai. p>
Vous avez écrit "[référence] signifie vaguement" Créer un alias pour la cellule de mémoire I et appelez-le r "tel que les deux se réfèrent à exactement la même cellule" qui est vrai aussi. P>
Vous avez probablement mal compris le document, vous avez raison et c'est le document. P>
Je pense que dans ce cas en regardant l'Assemblée pourrait être déroutant: le compilateur peut nécessiter un stockage pour mettre en œuvre une référence dans certaines circonstances et non dans d'autres. Sémantiquement, une référence est juste un alias, de sorte qu'il ne nécessite aucun stockage en soi.
R est référence indépendante (concept) ou juste un autre nom pour i. Quels que soient les modifications apportées à l'une ou l'autre seront réfléchies dans l'autre. P>
C ++ 11 §8.3.2 / 4
It is unspecified whether or not a reference requires storage.
Je ne pense pas que c'est un duplicata, je demande si la référence occupe réellement une cellule en mémoire, non si cette adresse peut être obtenue. Il y a une différence.
La question pourrait ne pas être la même chose, mais je pense que les réponses s'appliquent à celle-ci.
Il appartient au compilateur. Il est logique que la mémoire soit directement référencée plutôt que indirecte et je ne vois pas pourquoi le compilateur ne ferait pas cette optimisation, auquel cas elle dirait que je, au-delà de cette boîte et que RI Addr Boîte et flèche ne feraient pas exister.