Pourquoi T&& ne se comporte-t-il pas comme une référence Rvalue ?
Lorsque vous travaillez avec des surcharges de fonctions comme void f(T&&) et void f(T& ), il est surprenant de constater que f(T&) est appelé lors du passage de T&&, même si l'inverse n'est pas vrai. Cela est dû au comportement des références rvalue en C .
Contrairement à l'intuition, T&& n'est pas simplement une référence rvalue. Il s'agit d'une référence de type rvalue, ce qui signifie qu'elle ne peut se lier qu'à des rvalues mais se comporte autrement comme une lvalue de type rvalue référence. Ce comportement de liaison garantit que les objets sans nom et ceux sur le point de perdre leur nom sont automatiquement traités comme des rvalues.
Cependant, puisque T&& a un nom (c'est-à-dire t), il est considéré comme une lvalue et appelle donc le f( T&) surcharge. La conversion statique de t en T&&& à l'aide de f(static_cast
Pour résumer, les règles C régissant ce comportement sont :
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!