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
Freigeben: 2024-11-29 22:50:11
Original
301 Leute haben es durchsucht

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)
Nach dem Login kopieren

Innerhalb einer anderen Funktion:

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

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));
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage