我不明白什么时候应该使用std::move,什么时候应该让编译器优化......例如:
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
您的第二个版本积极禁止复制省略。第一个版本普遍更好。