首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有像RVO和NRVO那样的语言级别优化?

是否有像RVO和NRVO那样的语言级别优化?
EN

Stack Overflow用户
提问于 2013-12-20 04:03:43
回答 2查看 351关注 0票数 0

RVO是一个编译器优化,但可以提供一个非常有用的性能提升。然而,它没有得到保证,也不能被信赖。

语言标准本身有什么东西可以优化返回值吗?移动语义仍然复制成员值,对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-20 06:47:42

我不知道我是否误解了你的问题,但是(N)RVO实际上是“语言标准本身”。这被称为复制省略,并在第12.8.31节中进行了描述。

实际上,与RVO相比,移动构造的计算成本更高,因为正如您所说,它仍然必须将成员变量从一个内存位置“复制”到另一个内存位置(对象的浅层副本)。RVO完全消除了这些读/写操作。

(N)RVO在大多数情况下都能工作,而它不能(当一个函数可以返回多个变量之一时)移动构造。

AFAIK大家一致认为,自C++11以来,“优化返回值”的所有情况都有足够的涵盖范围。

票数 2
EN

Stack Overflow用户

发布于 2013-12-20 04:38:34

当以某种方式从函数返回时,C++11具有隐式移动的保证。

此外,您可以通过return {a,b,c};语法使用任何隐式构造函数直接构造返回值。

最后,如果rvo失败就变成了隐式移动,上面的第一个隐式移动通常被转换为nrvo,所以技术很好地一致。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20696073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档