这是一段代码:
bool EqualsA(const Foo& a, const Foo& b)
{
return a == b;
}
bool EqualsB(const Foo& a, const Foo& b)
{
const bool result = a == b;
return result;
}
int MethodA()
{
return GetValue() * GetOtherValue();
}
int MethodB()
{
const int result = GetValue() * GetOtherValue();
return result;
}
我想知道以这两种不同的方式返回值是否有任何不同(即时返回或存储结果变量)。我认为存储更适合调试,但有任何性能损失(我认为没有)或任何其他利弊使用其中之一。
答案 0 :(得分:4)
编译器可以自由地优化局部变量,因此性能将是相同的。
在很多代码分析工具中,这被标记为代码气味,我倾向于同意。 Debuggers can be made to see the return value on the stack所以本地变量不买任何东西。
答案 1 :(得分:3)
在合理的假设下,operator ==
类型的对象的Foo
的所选重载返回的值是bool
类型,一个体面的编译器会在重的时候优化你的临时存储使用了优化选项,因此与性能无关,无关紧要。
我的建议是选择能让您的代码更易读或更便于维护或调试的表单。