如果我有一个函数返回一个对象,但这个返回值从来不被调用者使用,编译器是否会优化拷贝? (可能是经常/有时/从不回答。)C++编译器会优化未使用的返回值吗?
小学例如:
ReturnValue MyClass::FunctionThatAltersMembersAndNeverFails()
{
//Do stuff to members of MyClass that never fails
return successfulResultObject;
}
void MyClass::DoWork()
{
// Do some stuff
FunctionThatAltersMembersAndNeverFails();
// Do more stuff
}
在这种情况下,将ReturnValue
对象获取的所有复制的?它甚至构建? (我知道它可能取决于编译器,但让我们将这个讨论缩小到流行的现代版本。)
编辑:让我们简化这一点,因为在一般情况下似乎没有共识。如果ReturnValue
是一个int,那么我们返回0而不是successfulResultObject
?
同意。只要返回值从未用于任何调用,启用“整个程序优化”也可以使其发生。 – 2008-11-07 18:07:54
@Drew,是“整个程序优化”的vC++的东西,因为我无法想象它可能在Linux/Unix环境中。 – 2008-11-07 18:13:09
对此的努力的传言,例如:http://www.airs.com/blog/archives/100 – 2008-11-08 12:09:25