【问题标题】:When does a compiler perform RVO?编译器何时执行 RVO?
【发布时间】:2013-04-11 14:13:27
【问题描述】:

似乎有很多关于编译器何时会执行 RVO 或为什么它在这样那样的情况下不执行它的问题。

看完http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ 我似乎也无法理解它。

基本上,编译器似乎“通常”会执行某种优化,但在极少数情况下它不能。

如果我正确理解了 Dave Abrahams 的文章,他并不真正建议按值返回,除非出于更好的可读性的原因。对我来说,这表明为了可读性和一致性,始终为大输出值传递引用可能是个好主意。

那么我应该传递引用以避免复制还是有什么方法可以确定编译器是否会优化掉一个副本?

另外,找出编译器是否会以特定方式进行优化的努力实际上比仅仅通过引用传递要少吗?

【问题讨论】:

标签: c++ return-value-optimization


【解决方案1】:

这篇文章的全部意义在于告诉你,你不应该担心这个。优化是一个黑匣子,除非在极少数情况下,否则您不应该关心它。

编译器在认为 RVO 适用时执行 RVO

【讨论】:

  • 我真的很想相信!
  • 我在此允许你相信它。
【解决方案2】:

任何体面的编译器都会支持它。继续使用它,除非您确定需要支持不支持的编译器。

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 2020-04-22
    • 2013-10-16
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2016-06-28
    相关资源
    最近更新 更多