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; }
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 :
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!