Ich brauchte einige Zeit, um den Unterschied zwischen einem rvalue und einem temporären Objekt zu verstehen. Aber jetzt die endgültige Ausschussentwurf Staaten auf Seite 75:rvalues und temporäre Objekte in der FCD
Ein rvalue [...] ist ein xValue, ein temporäres Objekt oder subobject davon, oder ein Wert, der nicht mit einem verbunden ist Objekt.
Ich kann meinen Augen nicht glauben. Das muss ein Fehler sein, oder?
Um zu klären, ist hier, wie ich die Begriffe verstehen:
#include <string>
void foo(std::string&& str)
{
std::cout << str << std::endl;
}
int main()
{
foo(std::string("hello"));
}
In diesem Programm gibt es zwei Ausdrücke, die die gleiche temporäre Objekt bezeichnen: die prvalue std::string("hello")
und die L-Wert str
. Ausdrücke sind keine Objekte, aber ihre Auswertung könnte einen ergeben. Insbesondere die Auswertung eines Prvalue liefert ein temporäres Objekt, aber ein Prvalue ist kein temporäres Objekt. Ist jemand mit mir einverstanden oder bin ich verrückt geworden? :)
Sie könnten in Betracht ziehen, die Standardnutzer direkt zu fragen, indem Sie eine Frage an comp.lang.C++ stellen: std –
@Noah: Ich tat. Mal sehen was passiert :) – fredoverflow
[link zu comp.std.C++ thread] (http://groups.google.de/group/comp.std.c++/browse_thread/thread/5cdae718218a462c) – fredoverflow