1

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

在阅读http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/之后 ,我似乎也无法理解它。

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

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

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

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

4

2 回答 2

1

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

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

于 2013-04-11T14:21:44.547 回答
0

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

于 2013-04-11T14:19:15.810 回答