Dyl*_*ens 4 c++ perfect-forwarding c++11
我很好奇这段代码在C++ 0x中是否合法.具体来说,函数中声明的对象move_it()是否会正确地移动到声明的对象main()?
#include <iostream>
#include <string>
#include <tr1/memory>
using namespace std;
class x
{
public:
x() { cout << "create " << this << endl; }
~x() { cout << "destroy " << this << endl; }
};
x&& move_it()
{
x r;
return move(r);
}
int main()
{
x n = move_it();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不,它返回对本地对象的引用,就像使用左值引用一样.
只需按值返回它,让x的假定移动构造函数选择rvalue.按值返回时,返回的对象是右值.
如果你很幸运,NRVO优化将会启动(就像之前一样)并且无论如何都要避免复制.