Quel est le sens de & en c++?
Je veux savoir la signification de & dans l'exemple ci-dessous:
class1 &class1::instance(){
///something to do
}
Pour tout le reste @Wim dit, je vais ajouter que c'est plus clair si vous écrivez
class1& class1::instance()
OriginalL'auteur Milad Sobhkhiz | 2011-03-13
Vous devez vous connecter pour publier un commentaire.
Cela signifie que votre méthode retourne un référence à un method1 objet. Une référence est juste comme un pointeur fait qu'il se rapporte à l'objet plutôt que d'être une copie, mais la différence avec un pointeur est que les références:
De sorte qu'ils sont une sorte de lumière, plus sûr de la version de pointeurs.
Il y a un exemple d'utilisation dans la question.
OriginalL'auteur Wim
La
&
opérateur a trois significations en C++.2 & 1 == 3
int x = 3; int* ptr = &x;
int x = 3; int& ref = x;
Ici vous avez une référence de type de modificateur. Votre fonction
class1 &class1::instance()
est une fonction membre de typeclass1
appeléinstance
, qui renvoie un référence-à-class1
. Vous pouvez voir ce plus clairement si vous écrivezclass1& class1::instance()
(ce qui est équivalent à votre compilateur).&
et*
de liaison à droite, dans des déclarations est tellement important qu'il couvre tous les arguments pour mettre avec le type, comme prévu dans l'article lié. C'est probablement parce que j'ai grandi dans l'ancienne C où "int a, b, *c;
" est un bon langage.Techniquement parlant, ils se lient à droite dans la grammaire, oui. J'ai fait mention dans l'article, et je ne vois pas comment qui "étouffe" les autres arguments. Le but de l'article est que, non, c'est pas la considération la plus importante. L'idée sur les ordinateurs est d'aider les humains: nous allons écrire le code qui fait sens pour nous, pas de code qui correspond à la langue des ordinateurs à nos frais.
Mais dans ce cas, si vous mettez le code dans la façon dont les "sens" de l'homme (traitement de l'indicateur dans le cadre de la spécificateurs de type plutôt que dans le cadre de la déclaration, dans la norme-ese), vous prenez des risques de bugs, car l'ordinateur ne permet pas de traiter de cette façon. Pour adapter l'ordinateur à l'humain dans ce cas nécessite un changement dans le définition de langage, dont nous ne pouvons pas faire sans une machine de temps; à défaut, la meilleure option est celle qui rend évident pour les lecteurs humains comment le compilateur va interpréter le code.
Qui, dans ce cas, signifie d'indiquer que la fonction retourne une référence en démontrant -- aussi hermétiquement que possible, un type de retour de
class1&
. Les seuls bugs susceptibles de se présenter avec cette habitude sont en multi-déclaration de pointeurs, je rejette dans mon article comme un sur-évalué frange cas pas l'emporter sur d'autres considérations, telles que celles qui ont conduit à cette question de la création.Je ne peux pas d'accord avec vous. À mon avis, la position de la
&
(même même*
) rend pas de différence dans la clarté du type de retour dans l'exemple original, mais le multi-déclaration scénario est réel et pas à distance une frange de cas. J'ai vu des gens faire cette erreur, même dans les soi-disant moderne, celui-decl-par-ligne C++. Il est aussi un argument que les câlins, les modificateurs de la gauche quand ils ne se lient pas de cette façon peut enseigner aux gens à mal interpréter les plus complexes declarators, comme lorsque les pointeurs de fonctions entrent en jeu (mais je vous avoue que ma règle personnelle, il ya toujours utiliser un typedef).OriginalL'auteur Lightness Races in Orbit
Sa référence (sans utiliser l'arithmétique des pointeurs pour l'atteindre) à un objet.
Ce que j'ai dit.
OriginalL'auteur stefan
Elle renvoie une référence à un objet du type sur lequel il a été défini.
Il y a un exemple d'utilisation dans la question.
Exemple d'utilisation est que je ne suis pas Google, ma réponse fournit plus que suffisant pour trouver des exemples sur une douzaine de sites web.
OriginalL'auteur Puppy
Dans le contexte de l'énoncé, on dirait qu'il serait de retour d'une référence à la classe dans laquelle est a été défini. Je soupçonne que dans le "Faire des Choses" est un
OriginalL'auteur Thomas Jones-Low
Cela signifie que la variable n'est pas la variable elle-même, mais une référence à elle. Par conséquent, en cas de changement de valeur, vous le verrez tout de suite si vous utilisez une instruction d'impression de la voir. Jetez un oeil sur les références et les pointeurs pour obtenir une réponse plus détaillée, mais basecally cela signifie une référence à la variable ou un objet...
OriginalL'auteur learnerNo1