Maison > développement back-end > C++ > Quand une référence Rvalue agit-elle comme une Lvalue à l'intérieur d'une fonction ?

Quand une référence Rvalue agit-elle comme une Lvalue à l'intérieur d'une fonction ?

Mary-Kate Olsen
Libérer: 2024-12-25 12:05:09
original
864 Les gens l'ont consulté

When Does an Rvalue Reference Act Like an Lvalue Inside a Function?

Quand une référence Rvalue se comporte-t-elle comme une Lvalue dans une fonction ?

Dans l'extrait de code ci-dessous, la fonction foo reçoit une référence rvalue paramètre nommé bar.

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

    cout << *temp << " @:" << temp << endl;
}
Copier après la connexion

Ce code a suscité une question : est-ce que bar est traité comme une lvalue dans la fonction, puisque l'adresse peut être prise ?

La barre est-elle une Rvalue ou une Lvalue ?

Cette question trouve essentiellement une réponse dans la question elle-même. Tout ce qui a un nom est une lvalue. Par conséquent, bar est perçu comme une lvalue. Cependant, il est crucial de noter que bar a le type de "référence rvalue à une chaîne."

Pour traiter bar comme une rvalue, std::move() doit lui être appliqué .

Pourquoi faire la différence entre les références Lvalue et Rvalue ?

Cette distinction devient importante lorsque l'on considère ce qui peut se lier à chaque type de référence. Les Lvalues ​​peuvent se lier à des références lvalue, tandis que les rvalues ​​se lient à des références rvalue (et tout peut se lier à une référence lvalue à const).

En d'autres termes, une rvalue ne peut pas être liée à une référence lvalue, et vice versa.

Paramètre de type de référence Rvalue

Lorsqu'il s'agit d'un paramètre de fonction de référence rvalue type, il est impératif de comprendre ce que cela signifie sur la valeur à laquelle pointe la référence. Une référence rvalue indique que la valeur qui lui est attribuée est une rvalue. Par conséquent, ses ressources seront libérées une fois l'expression terminée, lui permettant d'être gérée comme une rvalue.

Passer des références Rvalue

Lors du passage ultérieur d'un paramètre de référence rvalue, il y a deux options :

  1. Si vous avez terminé avec la référence, utilisez std::move(bar) pour indiquer que la valeur il fait référence à une rvalue.
  2. Si vous avez l'intention d'effectuer d'autres opérations sur la barre, conservez la référence lvalue pour éviter tout vol involontaire de ressources.

Conclusion

La distinction entre les références lvalue et rvalue ne réside pas dans leur comportement une fois obtenues, mais plutôt dans ce qui peut s'y lier. Cette compréhension est essentielle pour gérer et gérer efficacement les références au sein des fonctions.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal