Maison > développement back-end > C++ > Que signifie l'esperluette unique (&) dans une déclaration de fonction membre C ?

Que signifie l'esperluette unique (&) dans une déclaration de fonction membre C ?

Susan Sarandon
Libérer: 2024-12-15 11:55:09
original
691 Les gens l'ont consulté

What Does the Single Ampersand (&) Mean in a C   Member Function Declaration?

Comprendre l'esperluette unique dans la déclaration de fonction membre

Dans l'extrait de code donné :

class wrap {
   operator obj() const & { ... }   //Copy from me.
   operator obj() && { ... }  //Move from me.
};
Copier après la connexion

nous rencontrons deux déclarations de fonction membre avec des références différentes -qualificatifs (& et &&). Cependant, que signifie l'esperluette unique (&) ?

L'esperluette unique dans une déclaration de fonction membre non statique indique que la fonction membre est invoquée lorsque l'objet est une référence lvalue. Par défaut, les fonctions membres non statiques peuvent être invoquées sur les objets lvalue et rvalue. Cependant, en spécifiant &, la fonction ne peut accepter que les lvalues.

Pour illustrer la différence :

struct foo
{
   void bar() {}
   void bar1() & {}
   void bar2() && {}
};
Copier après la connexion
  • bar() accepte à la fois les lvalues ​​et les rvalues.
  • bar1() nécessite une référence lvalue, il ne peut donc être invoqué que sur des objets lvalue.
  • bar2() nécessite une rvalue référence, il ne peut donc être invoqué que sur des objets rvalue.

Exemple :

int main()
{
   foo().bar();  // (always fine)
   foo().bar1(); // doesn't compile because `bar1()` requires an lvalue
   foo().bar2(); // doesn't compile because `bar2()` requires an rvalue

   foo f;
   f.bar();      // (always fine)
   f.bar1();
   f.bar2();     // doesn't compile because `bar2()` requires an rvalue
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal