首页 >后端开发 >C++ >C 11:RVO 或显式'std::move”返回值?

C 11:RVO 或显式'std::move”返回值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-24 08:57:14225浏览

C  11: RVO or Explicit `std::move` for Return Values?

c 11 返回值优化还是移动?

在处理具有 move 语义的对象时,程序员可能想知道是否显式使用 std: :移动或依赖编译器执行返回值优化(RVO)。在这种情况下:

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 );
}

哪种方法更好?

答案很明确:始终使用第一种方法。编译器已经能够优化返回,并且显式使用 std::move 实际上会干扰此优化。

复制省略允许在返回对本地定义变量的右值引用时使用移动构造函数。通过显式移动结果,您可以阻止编译器为您执行此优化。

因此,为了获得最佳性能,请仅使用第一种方法而不进行显式移动。让编译器处理优化,因为它保证生成尽可能最有效的代码。

以上是C 11:RVO 或显式'std::move”返回值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn