如何使用返回值优化?
在任何情况下,我可以信任现代编译器使用优化,还是应该始终以安全的方式返回某种类型的指针/使用引用作为参数?
是否有任何已知的情况无法进行返回值优化?在我看来,返回值优化对于编译器来说相当容易执行。
发布于 2010-01-25 11:36:19
每当启用编译器优化(在大多数编译器中,即使在禁用优化时),RVO就会发生。NRVO稍微不常见,但大多数编译器也会执行这种优化,至少在启用优化时是这样。
您是对的,优化对于编译器来说是相当容易执行的,这就是编译器几乎总是这样做的原因。“无法制造”的唯一情况是优化不适用的情况: RVO只在返回未命名的临时参数时应用。如果您想返回一个命名的局部变量,那么NRVO就会应用,虽然编译器实现起来稍微复杂一些,但它是可行的,而且现代编译器对它没有问题。
发布于 2010-01-25 11:33:39
请参阅:http://en.wikipedia.org/wiki/Return_value_optimization#Compiler_support
发布于 2010-01-25 11:36:18
为了获得发生这种情况的最佳机会,您可以返回返回语句中直接构造的对象--任何人都能记住这个成语的名称吗--我已经忘记了
Foo f() {
....
return Foo( ... );
}但是和所有的优化一样,编译器总是可以选择不去做。到头来,如果您需要返回一个值,那么除了信任编译器之外,您别无选择--指针和引用不会切断它。
https://stackoverflow.com/questions/2131904
复制相似问题