Ich habe einen Code:Warum kann ich eine Rvalue-Referenz nicht an eine andere Funktion in C++ 11 übergeben?
void f(int&& i) {
auto lambda = [](int&& j) { (void)j; }
lambda(i);
}
int main() {
f(5);
}
Clang ++ gibt einen Fehler: no known conversion from 'int' to 'int &&' for 1st argument
Warum die i
seine Art zu int
ändert sich, wenn an den lambda()
weitergegeben werden?
Es hilft, zwischen der Variablen mit dem Namen 'i' zu unterscheiden, die den Typ' int && 'hat, und den Ausdruck 'i' geschrieben, der das Ergebnis der Auswertung der Variablen mit dem Typ' int' und Wert ist Kategorie 'lvalue'. Es ist einfach, die beiden zusammenzufassen, wenn wir beide mit derselben Syntax darstellen. Das Gleiche passiert mit 'int i' (Variable vom Typ 'int', lvalue Ausdruck vom Typ 'int') und 'int & i' (Variable vom Typ 'int &', lvalue Ausdruck vom Typ 'int'), aber Der Unterschied zwischen dem Typ der Variablen und dem Typ des Ausdrucks, der sie auswertet, wird mit rvalue refs wichtiger. – Casey
@Casey: Ihre beste Antwort ist meiner Meinung nach. – TonyK
@TonyK Es steht nicht alleine ohne die anderen Antworten (von denen ich alle drei aufwertete), ich dachte nur, es würde helfen, sie besser zu verstehen. Uns erfahrene Leute sind daran gewöhnt, aber es ist für neuere Programmierer sehr verwirrend, dass "ich" verschiedene Dinge in verschiedenen Kontexten meint. Rvalue-Referenzen sind * schwer * zu lehren. – Casey