Maison >développement back-end >C++ >Que signifie une seule esperluette (&) dans les paramètres de fonction membre C ?

Que signifie une seule esperluette (&) dans les paramètres de fonction membre C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-13 09:49:11853parcourir

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

Exploration du rôle de l'esperluette unique dans les paramètres des fonctions membres

Dans la programmation C, la syntaxe des fonctions membres inclut souvent l'utilisation de l'esperluette symboles (&) comme qualificatifs de référence pour les fonctions membres non statiques. Ces symboles peuvent influencer le comportement de l'appel de fonction en fonction de la catégorie de valeur de l'objet utilisé pour l'invoquer. Cet article explore l'importance de l'utilisation d'une seule esperluette (&) dans ce contexte.

Plus précisément, la présence d'une seule esperluette & après la liste de paramètres d'une déclaration de fonction membre implique que la fonction sera invoquée lorsque l'objet est une référence lvalue ou un objet régulier non-référence. Cela permet à la fonction d'être appelée directement en utilisant le nom de l'objet ou via une référence lvalue. Par exemple :

class wrap {
  public:
    operator obj() const & { ... } // Invocable via lvalue reference
};

En revanche, l'absence de tout qualificatif ref, ce qui signifie qu'il n'y a pas d'esperluette dans la déclaration, indique que la fonction peut être invoquée quelle que soit la catégorie de valeur de l'objet. Cela signifie qu'il peut être appelé en utilisant une référence lvalue ou rvalue.

Pour mieux comprendre la distinction, considérez l'extrait de code suivant :

struct foo {
  void bar() {} // Function without a ref-qualifier
  void bar1() & {} // Function with an lvalue reference ref-qualifier
  void bar2() && {} // Function with an rvalue reference ref-qualifier
};

Dans cet exemple :

  • bar peut être invoqué en utilisant à la fois des références lvalue et rvalue.
  • bar1 ne peut être invoqué qu'en utilisant des références lvalue ou des objets réguliers (c'est-à-dire des objets sans aucune référence).
  • bar2 ne peut être invoqué qu'à l'aide de références rvalue.

Pour illustrer ce comportement, le code suivant montre comment ces fonctions peuvent être appelé en fonction de la catégorie de valeur de l'objet :

foo().bar(); // Always fine
foo().bar1(); // Doesn't compile because bar1 requires an lvalue
foo().bar2();

foo f;
f.bar(); // Always fine
f.bar1();
f.bar2(); // Doesn't compile because bar2 requires an rvalue

En résumé, la présence d'une seule esperluette & après la liste de paramètres d'une déclaration de fonction membre indique que la fonction peut être invoquée lorsque l'objet est une référence lvalue. Cela fournit un moyen de restreindre l'invocation de la fonction en fonction de la catégorie de valeur de l'objet utilisé.

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