rvalueと lvalueについて数時間を費やしました。これが私が理解していることです
int main()
{
//.....
Foo foo = Bar1();
foo = Bar2();
//......
}
Foo Bar1()
{
//Do something including create foo
return foo;
}
Foo& Bar2()
{
//Do something including create foo
return foo;
}
c++03 ではBar1()
、返されたオブジェクトを (return の直前に) コピーし、コピーされたオブジェクトのアドレスを返します。破棄されようとしているオブジェクトの無駄なコピーを実行します。Bar2()
関数内で作成されたオブジェクトを返します。
C++11 ではBar1()
、Bar2()
本質的に同等です (またBar2()
、c++03 と同等です)。
そうですか?そうでない場合は、詳しく説明してください。