aia*_*iao 0 c++ rvalue lvalue c++11
关于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;
}
Run Code Online (Sandbox Code Playgroud)
在c ++ 03下,Bar1()将复制返回对象(就在返回之前),然后返回复制对象的地址; 执行一个即将被销毁的物品的浪费副本.Bar2()将返回在函数内创建的对象.
下C++ 11,Bar1()和Bar2()将基本上相等(并且也等同于Bar2()C++ 03).
是对的吗?如果没有,请详细说明.
他们不一样.Bar2()UB是两个标准.您不能通过引用返回在堆栈上创建的对象.
在C++ 03中Bar1()可以利用RVO并且不会复制任何内容.在C++ 11中,Bar1()如果不能使用RVO,它甚至会使用RVO或使用移动构造函数.
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |