小编典典

c++11返回值优化还是搬家?

all

我不明白什么时候应该使用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 );
}

我应该使用哪个?


阅读 63

收藏
2022-07-02

共1个答案

小编典典

只使用第一种方法:

Foo f()
{
  Foo result;
  mangle(result);
  return result;
}

已经 允许使用移动构造函数(如果有的话)。事实上,return当允许复制省略时,局部变量可以精确地绑定到语句中的右值引用。

您的第二个版本积极禁止复制省略。第一个版本普遍更好。

2022-07-02