这段代码合法吗?(C++ 0x移动语义)

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)

Bo *_*son 8

不,它返回对本地对象的引用,就像使用左值引用一样.

只需按值返回它,让x的假定移动构造函数选择rvalue.按值返回时,返回的对象是右值.

如果你很幸运,NRVO优化将会启动(就像之前一样)并且无论如何都要避免复制.