Maison >développement back-end >C++ >« bar » est-il une Lvalue ou une Rvalue dans « void foo(string&& bar) » ?

« bar » est-il une Lvalue ou une Rvalue dans « void foo(string&& bar) » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 11:43:14231parcourir

Is `bar` an Lvalue or an Rvalue in `void foo(string&& bar)`?

Comprendre les références Rvalue et les Lvalues

Considérez le code suivant :

void foo(string&& bar){
    string* temp = &bar;

    cout << *temp << " @:" << temp << endl;
}

Ici, la question se pose : Est-ce que la variable bar une rvalue ou une lvalue ?

Réponse : Bar est une Lvalue

Bien qu'elle ait le type "référence rvalue à une chaîne", bar est toujours une lvalue car elle a un nom. Une lvalue, par définition, est toute expression qui s'évalue à un emplacement de stockage nommé.

Différencier les références Rvalue des références Lvalue

Bien que vous puissiez effectuer des opérations similaires sur rvalue et Références lvalue au sein des expressions, elles diffèrent considérablement par ce qui peut s'y lier :

  • Références Lvalue : peuvent se lier à à la fois les lvalues ​​et les rvalues.
  • Références Rvalue (nommées) : ne peuvent se lier qu'à des rvalues.

Signification des références Rvalue

La distinction entre les références rvalue et lvalue devient crucial lorsqu'il s'agit de paramètres de fonction de type référence rvalue. Les références Rvalue véhiculent des informations précieuses : la valeur à laquelle elles font référence est une rvalue, ce qui signifie qu'elle est temporaire et sera détruite une fois l'expression terminée. Cela permet un traitement sûr de la valeur référencée en tant que rvalue.

Conclusion

La distinction entre les références rvalue et lvalue ne réside pas dans leur facilité d'utilisation dans les expressions mais dans ce qui peut être lié à eux. Les références Rvalue fournissent des informations cruciales sur la nature de la valeur référencée, permettant une gestion efficace des ressources et un traitement approprié en tant que 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