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&&>(t));
Other Regeln für R-Wert-Referenzen
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!