Ich frage mich über ein C++ - Verhalten, wenn ein R-Wert zwischen den Funktionen übergeben wird.r-Wert Parameter in einer Funktion
Blick auf diese einfache Code:
#include <string>
void foo(std::string&& str) {
// Accept a rvalue of str
}
void bar(std::string&& str) {
// foo(str); // Does not compile. Compiler says cannot bind lvalue into rvalue.
foo(std::move(str)); // It feels like a re-casting into a r-value?
}
int main(int argc, char *argv[]) {
bar(std::string("c++_rvalue"));
return 0;
}
Ich weiß, wenn ich in bar
Funktion bin ich move
Funktion verwenden, um benötigen foo
Funktion aufzurufen. Meine Frage ist jetzt warum?
Wenn ich in der bar
Funktion bin die Variable str
sollte schon sein, ein r-Wert, aber der Compiler fungiert, wie es ein l-Wert ist.
Kann jemand einen Verweis auf den Standard zu diesem Verhalten zitieren? Danke!
Benanntes Objekt ist immer Lvalue. Deshalb brauchst du "bewegen". –