J'ai remarqué qu'il n'y a aucune référence à la référence, mais il y a un pointeur au pointeur, et il n'y a pas non plus de référence de références, mais un éventail de pointeurs. P>
Quelqu'un pourrait-il me donner une raison quelconque? p>
4 Réponses :
Il est selon la norme C ++ 8.3.2 / 4: P>
Il n'y aura pas de références aux références, sans table de références et aucun point de référence aux références. P> blockQuote>
Les références de rvalue ne sont pas des références aux références, bien que leur syntaxe && code> pourrait le suggérer.
-1 très rare pour moi de bowevote, mais je veux dire vraiment, quel est le point de cette réponse? Certaines affiches semblent imaginer que la norme est une sorte de livre sacré. Tout d'abord, vous avez besoin d'une langue utile et de sens que ce n'est qu'un standard nécessaire.
@Bill: Comment une langue d'abord a-t-elle une langue alors une norme, lorsque des langues sont définies par des normes? La langue C ++ est définie i> par la seule standard; Toute question concernant C ++ ne peut être répondant qu'avec des informations de la norme. Que proposeriez-vous comme une réponse à la place?
@Gman. Vous mal comprendre comment fonctionne le monde. La normalisation C ++ s'est produite après que C ++ a été créée et jugée utile. Pensez-vous vraiment qu'il est plausible de dépenser une vaste quantité d'efforts créant une norme énormément détaillée (comme la norme C ++) comme première étape du lancement de la langue? Non, ces choses fonctionnent de manière biologique, quelqu'un a une idée, fait un compilateur de jouet, le montre à d'autres personnes, il construit un élan (ou non), éventuellement, vous risquez d'obtenir quelque chose comme la norme C ++. Je proposerais comme une réponse à une explication de la raison pour laquelle cette fonctionnalité de C ++ a du sens. D'autres ont fourni cela.
Fredoverflow, semble être que vous avez raison. Il n'y a toujours pas de pointeurs pour faire des références de rvalue.
Je pensais que la question posée de fournir un raisonnement derrière cela.
Les pointeurs sont mutables (si non constitué), des références jamais. Ainsi, il n'y a pas de point d'avoir un pointeur ou une référence à une référence. P>
En outre, une référence doit toujours faire référence à quelque chose - il n'existe pas de référence null. C'est pourquoi il ne peut y avoir de tableaux de références, car il n'ya aucun moyen d'instancier par défaut des références à l'intérieur d'une matrice à une valeur significative. P>
Maintenant que nous avons une initialisation du tableau en C ++ 11, il semble qu'il pourrait y avoir des matrices de références.
Il y a toujours eu une initialisation du tableau, et je ne vois pas pourquoi INT & REFS [2] = {x, y}; est immoral.
Une référence est une abstraction au niveau de la langue. C'est une manière opaque d'alias une variable à une autre. En dessous de la hotte, le compilateur est susceptible de résoudre des références à l'aide de pointeurs, ce sont des choses très différentes à un niveau supérieur. D'autre part, les pointeurs sont explicitement utilisés par un programmeur pour atteindre l'indirection. Une variable de pointeur est une variable distincte de ce qu'elle est pointée. Une référence doit être réfléchie comme si elle est simplement un alias à la variable d'origine, pas comme si elle est une autre variable détenant une adresse. Par conséquent, un alias pour un alias d'une variable serait simplement un alias à la variable elle-même. Compte tenu de la liaison d'une référence à une variable est une chose de compilation peut aider à comprendre la justification de ce comportement. P>
Avec ce raisonnement, vous pouvez affirmer que, étant donné que les tableaux sont des structures qui stockent des valeurs, non des variables, il n'a pas de sens qu'ils sont capables de stocker des alias de variables. Fondamentalement, une variable de référence (par laquelle je veux dire le pointeur, s'il existe, que peut être utilisé par le compilateur pour filer la référence) est invisible au programmateur au niveau C ++. S'il était possible de déclarer des tableaux de références, le compilateur devait probablement nécessiter des index constants transmis aux tableaux pour pouvoir résoudre la liaison au moment de la compilation. P>
C'est la seule réponse qui explique pourquoi la norme ne veut pas que aucune implémentation permettait de permettre des révises de références.
C ++ Standard 8.3.2 / 4: P>
Le raisonnement derrière ceci est qu'une référence n'existe pas en soi au moment de l'exécution. Une référence simplement est un autre nom pour un emplacement. Ils sont immuables. P> Il ne doit y avoir aucune référence à des références, aucune table de références et aucun point de référence sur les références. code> p>
Les références sont occupées de la mémoire. Vérifiez quelle est la taille de struct x {int & x; Long & X; } code> par exemple.
David, constructeur omis pour la simplicité.
Les références existent beaucoup au moment de l'exécution. Vérifiez votre pile d'appels en binaire. Regarder-les adresses Pointez sur vos objets! :)
Parce que Bjarne Stroustrup le dit.
Dupliqué possible: Stackoverflow.com/questions/1164266 / ...
Ces réponses ennuyeuses. Que diriez-vous de répondre à la question de savoir pourquoi la norme le désactive? Y a-t-il une raison fondamentale pour laquelle C ++ ne peut pas supporter les références de reproduction?
@Caspin: une fois limité de cette manière, une référence peut être mise en oeuvre comme un alias dans la table des symboles (c'est-à-dire qu'il n'est pas attribué à son propre stockage et n'a aucune existence une fois que la génération de code se produit), et parce que C ++ hérité des pointeurs de C, il n'a pas besoin de construire des comportements plus compliqués dans des références.