Maison >développement back-end >C++ >Fonctions membres C : que signifient '&' et '&&' dans les listes de paramètres ?

Fonctions membres C : que signifient '&' et '&&' dans les listes de paramètres ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-12 17:15:12594parcourir

C   Member Functions: What Do `&` and `&&` Mean in Parameter Lists?

Listes de paramètres de fonctions membres : dévoilement du symbole &

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.

Esperluette unique (&)

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.

Pas d'esperluette

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)
}

Référence Rvalue (&&)

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.

Différences clés

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!

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