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
Susan Sarandonoriginal
2024-12-15 11:55:09694parcourir

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.
};

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() && {}
};
  • 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
}

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!

Déclaration:
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