#include <string>
std::string f()
{
std::string s;
return std::move(s);
}
int main()
{
f();
}
g++ -Wall z.cpp
给出如下警告:
z.cpp: In function ‘std::string f()’:
z.cpp:6:21: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]
6 | return std::move(s);
| ~~~~~~~~~^~~
z.cpp:6:21: note: remove ‘std::move’ call
我知道如果我更改return std::move(s);
为return s;
,警告将被避免。但是,根据C++ 标准,NRVO
在这种情况下,不能保证。如果我写return s;
,我不确定是否NRVO
会被执行。
如何缓解不确定感?