Maison > développement back-end > C++ > Pourquoi « T&& » ne se comporte-t-il pas toujours comme une véritable référence Rvalue ?

Pourquoi « T&& » ne se comporte-t-il pas toujours comme une véritable référence Rvalue ?

Linda Hamilton
Libérer: 2024-11-30 06:21:15
original
395 Les gens l'ont consulté

Why Doesn't `T&&` Always Behave Like a True Rvalue Reference?

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(t)) est nécessaire pour invoquer la surcharge de référence rvalue f(T&&).

Pour résumer, les règles C régissant ce comportement sont :

  • Des mouvements implicites se produisent lors du renvoi de valeurs nommées à partir de fonctions, lorsque les valeurs n'ont pas de nom ou lorsque les fonctions renvoient explicitement une rvalue références.
  • Seules les références rvalue et const& peuvent se lier à des rvalues.
  • L'extension de la durée de vie des références sur les valeurs temporaires se produit lorsqu'elles sont directement liées à une référence en dehors d'un constructeur et s'applique aux références rvalue et const&.
  • T&& n'est pas toujours une référence de valeur ; il peut se réduire à X&, X const& ou X const&& en fonction du type de T.
  • T&& peut agir comme une « référence de transfert » dans les contextes de déduction de type, déduisant T en fonction du type de l'argument.

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