我不明白何时应该使用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 );
}
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个?
通过值返回带有已删除副本构造函数的对象是否合法?例如,考虑具有std::unique_ptr成员的对象。大多数编译器在按值返回此类对象时不会抱怨,因为在大多数情况下,编译器甚至不会寻找副本构造函数。但是,由于标准不要求(N)RVO,因此可以说这些程序合法吗?是std::move在return语句为了在这些情况下,标准合规?