其他分享
首页 > 其他分享> > c 11返回值优化还是移动?

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