gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:15 26 4
gpt4 key购买 nike

我很好奇这段代码在 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;
}

最佳答案

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

只需按值返回它,让 x 的假定移动构造函数获取右值。按值返回时,返回的对象是右值。

如果幸运的话,NRVO 优化将启动(就像以前一样)并以任何方式省略复制。

关于c++ - 这段代码合法吗? (C++0x 移动语义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6764195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com