首页 > 后端开发 > C++ > C 11 中的 RVO 与显式移动:我什么时候应该使用哪个?

C 11 中的 RVO 与显式移动:我什么时候应该使用哪个?

Barbara Streisand
发布: 2024-12-21 07:11:09
原创
132 人浏览过

RVO vs. Explicit Move in C  11: When Should I Use Which?

C 11 中的返回值优化与显式移动:使用哪个?

在 C 11 中,开发人员可以选择增强性能通过两种技术:返回值优化 (RVO) 和使用 std::move 的显式移动操作。在考虑使用哪种方法时,必须了解它们之间的差异及其各自的适用性。

返回值优化 (RVO)

RVO 是由编译器消除了不必要的复制操作。当函数的 return 语句涉及到生命周期在函数执行后立即结束的对象时,编译器可以通过直接返回对象的值来优化副本,从而避免其构造和销毁。

显式移动操作

使用 std::move 的显式移动操作会强制编译器移动对象的所有权,而不是复制它。这是通过将对象作为右值引用传递,然后在其返回值上调用 std::move 来实现的。

使用哪种方法?

在 RVO 之间进行选择时和显式移动,始终优先使用 RVO。复制省略是一种高效的编译器优化,可以显着提高性能。

如提供的代码片段所示,函数 read 可以使用 RVO 返回 SerialBuffer:

SerialBuffer read(size_t size) const
{
    SerialBuffer buffer(size);
    read(begin(buffer), end(buffer));
    return buffer;
}
登录后复制

默认情况下,编译器将优化返回操作,尽可能消除复制的需要。

仅当无法应用 RVO 时才应使用显式移动操作。例如,如果对象的生命周期超出了函数的执行时间,则使用 std::move 可以明确表示移动对象所有权的意图。不过,这种情况应该很少见,RVO 一般就足够了。

以上是C 11 中的 RVO 与显式移动:我什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板