#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
.
Как облегчить чувство неуверенности?