Comprendre les variables de référence Rvalue
En C, les références rvalue sont un type de référence spécialisé qui ne peut se lier qu'à des rvalues (valeurs sans nom ). Cependant, un comportement surprenant se produit lorsqu'une fonction est surchargée à la fois avec une référence lvalue et une surcharge de référence rvalue.
Confusion : les variables de référence Rvalue se comportent comme des Lvalues
Considérez le surcharges de fonctions suivantes :
void f(T&&); // Overload #1 (rvalue reference) void f(T&); // Overload #2 (lvalue reference)
Au sein d'un autre function :
void g(T&& t) { f(t); // Calls Overload #2 (lvalue reference) }
Le résultat surprenant est que la surcharge #2 (référence lvalue) est appelée, même si l'argument t est une référence rvalue.
Raison : les références Rvalue sont Les Lvalues avec un type spécial
Les références Rvalue sont considérées comme des lvalues car elles ont un nom et peuvent être utilisées comme lvalue pour la plupart fins. Cependant, leur type, référence rvalue, spécifie leurs capacités de liaison limitées.
Comment invoquer la surcharge de référence Rvalue
Pour invoquer la surcharge de référence rvalue, l'argument doit être explicitement converti en une référence rvalue à l'aide de l'opérateur static_cast :
f(static_cast<T&&>(t));
Autres règles régissant la Rvalue Références
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!