Maison >développement back-end >C++ >Fonctions membres C : que signifient '&' et '&&' dans les listes de paramètres ?
Lors de la déclaration de fonctions membres en C , on peut rencontrer l'utilisation de symboles & et && après la liste de paramètres. Ces symboles, appelés qualificatifs ref, indiquent le type de référence du paramètre d'objet implicite.
L'esperluette unique (&) signifie que la fonction membre sera invoquée lorsque l'objet est une référence lvalue. Une référence lvalue fait référence à un objet existant stocké dans un emplacement mémoire particulier. L'extrait de code suivant démontre son utilisation :
class wrap { public: operator obj() const & { ... } operator obj() && { ... } private: obj data_; };
La fonction Operator obj() avec le qualificatif & ref sera invoquée lorsque l'objet est une référence lvalue. Cela signifie qu'il peut être appelé en utilisant à la fois les expressions lvalue et rvalue.
En l'absence de qualificatif ref, le paramètre d'objet implicite est traité comme une référence lvalue. Cela permet à la fonction membre d'être invoquée avec les expressions lvalue et rvalue. Le code ci-dessous présente ce comportement :
struct foo { void bar() {} }; int main() { foo().bar(); // (always fine) foo f; f.bar(); // (always fine) }
Le qualificatif && ref indique que la fonction membre sera invoquée lorsque l'objet est une référence rvalue. Une référence rvalue fait référence à un objet temporaire ou évalué par expression qui ne peut pas être lié à un emplacement mémoire spécifique.
Le tableau suivant résume les différences entre l'esperluette unique (&) et pas d'esperluette :
Ref-Qualifier | Reference Type | Can be Invoked With |
---|---|---|
& | lvalue reference | lvalue and rvalue expressions |
None | lvalue reference | lvalue and rvalue expressions |
Comprendre ces qualificatifs de référence est crucial pour implémenter correctement les fonctions membres et adapter leur comportement en fonction des contexte.
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!