首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信任返回值优化

信任返回值优化
EN

Stack Overflow用户
提问于 2010-01-25 11:31:38
回答 3查看 909关注 0票数 6

如何使用返回值优化?

在任何情况下,我可以信任现代编译器使用优化,还是应该始终以安全的方式返回某种类型的指针/使用引用作为参数?

是否有任何已知的情况无法进行返回值优化?在我看来,返回值优化对于编译器来说相当容易执行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-25 11:36:19

每当启用编译器优化(在大多数编译器中,即使在禁用优化时),RVO就会发生。NRVO稍微不常见,但大多数编译器也会执行这种优化,至少在启用优化时是这样。

您是对的,优化对于编译器来说是相当容易执行的,这就是编译器几乎总是这样做的原因。“无法制造”的唯一情况是优化不适用的情况: RVO只在返回未命名的临时参数时应用。如果您想返回一个命名的局部变量,那么NRVO就会应用,虽然编译器实现起来稍微复杂一些,但它是可行的,而且现代编译器对它没有问题。

票数 8
EN

Stack Overflow用户

发布于 2010-01-25 11:33:39

请参阅:http://en.wikipedia.org/wiki/Return_value_optimization#Compiler_support

票数 6
EN

Stack Overflow用户

发布于 2010-01-25 11:36:18

为了获得发生这种情况的最佳机会,您可以返回返回语句中直接构造的对象--任何人都能记住这个成语的名称吗--我已经忘记了

代码语言:javascript
复制
Foo f() {
    ....
    return Foo( ... );
}

但是和所有的优化一样,编译器总是可以选择不去做。到头来,如果您需要返回一个值,那么除了信任编译器之外,您别无选择--指针和引用不会切断它。

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

https://stackoverflow.com/questions/2131904

复制
相关文章

相似问题

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