-
22-09-2019 - |
题
你如何去使用的返回值优化的?点击 是否有一个地方我可以信任的现代编译器使用优化,或者我应该经常去的安全方法和返回某个类型的指针/使用引用作为参数的任何情况下?
是否有其中返回值优化不能由任何已知的情况下?, 在我看来,返回值优化将是相当容易的编译器执行。
解决方案
每当编译器优化被允许(并且在大多数的编译器,即使当优化是停用的),RVO将发生。 NRVO是不太常用的,但大多数的编译器将执行该优化,以及,至少在优化被启用。
你是对的,最优化的为的相当容易的编译器执行,这是为什么编译器几乎总是这样做。它“不能做”的唯一情况是在优化不适用的:当你返回一个无名临时RVO才适用。如果你想返回名为局部变量,NRVO适用代替,而它是稍微复杂的编译器来实现,这是可行的,而现代的编译器都没有问题了。
其他提示
要拥有它发生的最好的机会,你可以直接返回在return语句构造一个对象[任何人都可以记住的名字为这个成语 - 我忘了]:
Foo f() {
....
return Foo( ... );
}
不过,正如所有的优化,编译器总是可以选择不这么做。并在这一天结束,如果你需要返回一个值,你是不可替代的信任编译器 - 指针和引用不会削减它
不隶属于 StackOverflow