2017-06-26 2 views
0

Ich bin ein neuer C++ Anfänger. Ich verstehe nicht, warum der AusdruckFunktion gibt eine Zeichenfolge als Rvalue zurück

string three() { return "kittens"; } 

einen Rvalue zurückgibt. Ist es wegen der zurückgegebenen Zeichenfolge (Kätzchen) ein temporärer Wert? Vielen Dank

+2

Technisch, was Sie auf dem Laufenden ist kein Ausdruck, L-Wert, oder R-Wert; Es ist eine Funktionsdefinition. Aber angesichts dieser Definition wäre der Ausdruck 'three()' ein rvalue. – aschepler

Antwort

0

Ja - es erstellt ein temporäres Zeichenfolgenobjekt, das das grundlegende (C-style) Zeichenfolgenliteral in Ihrer return-Anweisung verwendet und das als temporären Wert zurückgibt. Jeder, der Ihre Funktion aufruft, muss entweder den temporären rvalue in einen lvalue kopieren oder er wird am Ende der Anweisung verworfen.

Oder, um genauer zu sein, der Compiler ist hilfreich, indem er automatisch den Konvertierungskonstruktor von std :: string aufruft, um den String (a const char*) in eine Zeichenkette umzuwandeln, was Ihren Code mehr oder weniger äquivalent zu return std::string("kittens") macht.

Here is a short (but useful) primer on the difference between lvalues and rvalues

Verwandte Themen