我花了几个小时来讨论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)。
是对的吗?如果不是,请详细说明。