Heim >Backend-Entwicklung >C++ >Warum wird „f(T&&)' nicht aufgerufen, wenn eine R-Wert-Referenz darauf übergeben wird?

Warum wird „f(T&&)' nicht aufgerufen, wenn eine R-Wert-Referenz darauf übergeben wird?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-08 13:17:11154Durchsuche

Why Doesn't `f(T&&)` Get Called When Passing an Rvalue Reference to It?

Warum R-Wert-Referenzen Variablen keine R-Wert-Referenzen sind

Betrachten Sie zwei Überladungen einer Funktion f:

void f(T&&&); // #1
void f(T&);  // #2

In eine andere Funktion g:

void g(T&& t) 
{ 
  f(t);  // calls #2
}

Warum erfolgt die Überladung f(T&) aufgerufen, obwohl der Parameter t ein R-Wert ist?

Die Natur von R-Wert-Referenzen

R-Wert-Referenzen sind Variablen, die nur an R-Werte (Objekte ohne) gebunden werden können Namen). T&&t hat einen Namen, was es zu einem L-Wert macht.

Unterscheidung zwischen Typ und Wert

T&& ist die Typ-R-Wert-Referenz. Eine R-Wert-Referenz kann nur an R-Werte gebunden werden, ist aber ansonsten ein L-Wert vom Referenztyp.

Sonderfälle

  • static_cast(t): Dadurch wird explizit eine R-Wert-Referenz erstellt, die den Aufruf von ermöglicht f(T&&).

Regeln für R-Wert-Referenzen

  • Implizite Verschiebungen treten auf, wenn benannte Werte von Funktionen zurückgegeben werden oder wenn Werte keine Namen haben.
  • R-Wert-Referenzen oder const& können nur an R-Werte gebunden werden.
  • Referenz Die Lebenszeitverlängerung gilt für temporäre Dateien, die an Referenzen außerhalb von Konstruktoren gebunden sind.
  • In bestimmten Kontexten wird T&& auf X& oder X const& reduziert, wenn T X& oder X const& ist.
  • T&& kann als „Weiterleitungsreferenz“ fungieren " im Typabzug.

Das obige ist der detaillierte Inhalt vonWarum wird „f(T&&)' nicht aufgerufen, wenn eine R-Wert-Referenz darauf übergeben wird?. 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