- 主题:神奇的move又来了
Some programmers might be tempted to "optimize" the code by putting std::move into the return statement like this:
T fn()
{
T t;
return std::move (t);
}
However, here the call to std::move precludes the NRVO, because it breaks the conditions specified in the C++ standard, namely [class.copy.elision]: the returned expression must be a name. The reason for this is that std::move returns a reference, and in general, the compiler can't know to what object the function returns a reference to. So GCC 9 will issue a warning (when -Wall is in effect):
t.C:8:20: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]
8 | return std::move (t);
| ~~~~~~~~~~^~~
t.C:8:20: note: remove ‘std::move’ call
--
FROM 221.219.211.*
这个return为什么要用move?
--
FROM 27.186.197.*
string t;
return std::move(t);
标准move用法啊
要不然会调用拷贝构造函数,生成副本
【 在 pgw 的大作中提到: 】
: 这个return为什么要用move?
--
FROM 111.199.185.*
不标准,提示信息已经很直白了。
- 来自 水木社区APP v3.5.7
【 在 iwantfly 的大作中提到: 】
: string t;
: return std::move(t);
: 标准move用法啊
: 要不然会调用拷贝构造函数,生成副本
--
FROM 73.231.50.*
不需要吧
【 在 iwantfly 的大作中提到: 】
: string t;
: return std::move(t);
: 标准move用法啊
: ...................
--
FROM 167.220.233.*
你这是理解反了吧
这里不要用move
--
FROM 114.240.244.*
这种影响编译器优化
【 在 iwantfly 的大作中提到: 】
: string t;
: return std::move(t);
: 标准move用法啊
: ...................
--
FROM 39.155.212.*
标准啥呀,脱裤子放屁
返回将亡值编译器会自行优化的
而且就个String ,就算多调个构造函数也没啥的,除非傻傻放到大loop里
【 在 iwantfly 的大作中提到: 】
:
: string t;
: return std::move(t);
: 标准move用法啊
: 要不然会调用拷贝构造函数,生成副本
--
FROM 123.114.94.*
返回值优化
move只是转右值而已
【 在 iwantfly (雷雷) 的大作中提到: 】
: string t;
: return std::move(t);
: 标准move用法啊
: 要不然会调用拷贝构造函数,生成副本
--
FROM 114.254.109.*