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
Patricia Arquetteoriginal
2024-11-29 22:50:11320parcourir

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)

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&amp;&amp;>(t));

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!

Déclaration:
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