Maison > développement back-end > C++ > Pourquoi une référence Rvalue agit-elle parfois comme une Lvalue dans la surcharge de fonctions C ?

Pourquoi une référence Rvalue agit-elle parfois comme une Lvalue dans la surcharge de fonctions C ?

Patricia Arquette
Libérer: 2024-11-29 22:50:11
original
310 Les gens l'ont consulté

Why Does an Rvalue Reference Sometimes Act Like an Lvalue in C   Function Overloading?

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)
Copier après la connexion

Au sein d'un autre function :

void g(T&& t) 
{ 
  f(t);  // Calls Overload #2 (lvalue reference)
}
Copier après la connexion

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&amp;&amp;>(t));
Copier après la connexion

Autres règles régissant la Rvalue Références

  • T&& peut se comporter comme une référence de transfert dans un contexte de modèle.
  • T&& peut se lier à des rvalues ​​ou à des références à des rvalues ​​(X const&&).
  • Les références Rvalue ont des propriétés de liaison statiques et dynamiques.
  • L'extension de la durée de vie des références se produit lorsque les références rvalue se lient directement à des valeurs temporaires, prolongeant leur durée de vie jusqu'à l'expiration de la durée de vie de la référence.

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