如果我有一个返回对象的函数,但调用者从不使用这个返回值,编译器会优化掉副本吗?(可能总是/有时/从不回答。)
基本示例:
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
呢?