c 11返回值优化还是移动?
作者:互联网
参见英文答案 > C++11 rvalues and move semantics confusion (return statement) 6个
我不明白何时应该使用std :: move,何时应该让编译器优化…例如:
using SerialBuffer = vector< unsigned char >;
// let compiler optimize it
SerialBuffer read( size_t size ) const
{
SerialBuffer buffer( size );
read( begin( buffer ), end( buffer ) );
// Return Value Optimization
return buffer;
}
// explicit move
SerialBuffer read( size_t size ) const
{
SerialBuffer buffer( size );
read( begin( buffer ), end( buffer ) );
return move( buffer );
}
我应该使用哪个?
解决方法:
仅使用第一种方法:
Foo f()
{
Foo result;
mangle(result);
return result;
}
这将允许使用移动构造函数(如果有).事实上,当允许复制省略时,局部变量可以精确地绑定到return语句中的右值引用.
您的第二个版本主动禁止复制省略.第一个版本普遍更好.
标签:return-value-optimization,rvo,c,c11,move 来源: https://codeday.me/bug/20190911/1803941.html