Maison >développement back-end >C++ >Quelle est la différence entre les esperluettes simples et doubles dans les déclarations de fonctions membres C ?

Quelle est la différence entre les esperluettes simples et doubles dans les déclarations de fonctions membres C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 13:34:13440parcourir

What's the Difference Between Single and Double Ampersands in C   Member Function Declarations?

Interprétation approfondie de l'esperluette dans les déclarations de fonctions membres

En C , les fonctions membres non statiques peuvent être décorées avec des qualificatifs ref . Ces qualificatifs spécifient la catégorie de référence du paramètre d'objet implicite qui est transmis à la fonction.

Explorons les deux qualificatifs de référence courants :

  1. Esperluette unique (&)  : indique que la fonction peut être invoquée avec une référence lvalue à l'objet.
  2. Double Esperluette (&&) : indique que la fonction peut être invoquée avec une référence rvalue à l'objet.

Sans spécifier de qualificatif de référence, la fonction peut être invoquée quelle que soit la catégorie de valeur de l'objet.

Pour illustrer la différence :

struct Foo {
    void bar() {}  // Default: can be invoked with both lvalues and rvalues
    void bar1() & {}  // Can only be invoked with lvalues
    void bar2() && {}  // Can only be invoked with rvalues
};

Dans ce qui précède exemple :

  • bar() peut être invoqué à la fois sur les lvalues ​​(objets) et sur les rvalues ​​(objets temporaires).
  • bar1() ne peut être invoqué que sur les lvalues ​​car il nécessite une lvalue référence à l'objet.
  • bar2() ne peut être invoqué que sur des rvalues ​​car il nécessite une référence rvalue à l'objet. objet.

Voici une démonstration en direct :

int main() {
    Foo f;
    f.bar();
    f.bar1();
    Foo().bar2();  // Error: bar2 requires an rvalue
}

Comprendre ces qualificatifs ref vous permet de contrôler l'accès à vos fonctions membres en fonction de la catégorie de référence de l'objet dont elles sont étant invoqué le.

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