Heim >Backend-Entwicklung >C++ >Warum verhält sich eine R-Wert-Referenz beim Überladen von C-Funktionen manchmal wie ein L-Wert?

Warum verhält sich eine R-Wert-Referenz beim Überladen von C-Funktionen manchmal wie ein L-Wert?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-29 22:50:11410Durchsuche

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

R-Wert-Referenzvariablen verstehen

In C sind R-Wert-Referenzen ein spezieller Referenztyp, der nur an R-Werte (Werte ohne Namen) gebunden werden kann ). Es kommt jedoch zu einem überraschenden Verhalten, wenn eine Funktion sowohl mit einer L-Wert-Referenz als auch mit einer R-Wert-Referenzüberladung überladen wird.

Verwirrung: R-Wert-Referenzvariablen verhalten sich wie L-Werte

Bedenken Sie das Folgende Funktionsüberladungen:

void f(T&&); // Overload #1 (rvalue reference)
void f(T&);  // Overload #2 (lvalue reference)

Innerhalb einer anderen Funktion:

void g(T&& t) 
{ 
  f(t);  // Calls Overload #2 (lvalue reference)
}

Das überraschende Ergebnis ist, dass Overload #2 (L-Wert-Referenz) aufgerufen wird, obwohl das Argument t eine R-Wert-Referenz ist.

Grund: R-Wert-Referenzen sind L-Werte mit einem speziellen Typ

R-Wert-Referenzen werden als L-Werte betrachtet, da sie einen Namen haben und verwendet werden können als L-Wert für die meisten Zwecke. Ihr Typ, R-Wert-Referenz, gibt jedoch ihre eingeschränkten Bindungsfähigkeiten an.

So rufen Sie die R-Wert-Referenzüberladung auf

Um die R-Wert-Referenzüberladung aufzurufen, muss das Argument sein explizit mit dem static_cast-Operator in eine R-Wert-Referenz konvertiert:

f(static_cast<T&amp;&amp;>(t));

Other Regeln für R-Wert-Referenzen

  • T&& kann als Weiterleitungsreferenz in einem Vorlagenkontext fungieren.
  • T&& kann an R-Werte oder Verweise auf R-Werte gebunden werden (X const&&).
  • Rvalue-Referenzen haben sowohl eine statische als auch eine dynamische Bindung Eigenschaften.
  • Eine Verlängerung der Referenzlebensdauer tritt auf, wenn R-Wert-Referenzen direkt an temporäre Werte gebunden werden, wodurch ihre Lebensdauer verlängert wird, bis die Lebensdauer der Referenz abläuft.

Das obige ist der detaillierte Inhalt vonWarum verhält sich eine R-Wert-Referenz beim Überladen von C-Funktionen manchmal wie ein L-Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn