【发布时间】:2012-09-19 12:07:12
【问题描述】:
我经常看到其他函数被多次调用的函数,而不是一次存储函数的结果。
即(1):
void ExampleFunction()
{
if (TestFunction() > x || TestFunction() < y || TestFunction() == z)
{
a = TestFunction();
return;
}
b = TestFunction();
}
我会这样写,(2):
void ExampleFunction()
{
int test = TestFunction();
if (test > x || test < y || test == z)
{
a = test;
return;
}
b = test;
}
我认为版本 2 更易于阅读和调试。 但我想知道为什么人们会像第一名那样做? 有什么我看不到的吗?性能问题? 当我查看它时,在最坏的情况下,我看到数字 (1) 中的 4 个函数调用而不是数字 (2) 中的 1 个函数调用,所以数字 (1) 的性能应该更差,不是吗?
【问题讨论】:
-
问问写代码的人!
-
编译器可能会将代码优化为类似于您的替代方案两个,因此性能不是问题。我自己,我发现第一个替代方案实际上更具可读性。
-
可能会有副作用,这意味着每次都必须调用该函数。因此,您的问题的答案是:视情况而定。
-
@JoachimPileborg 我不相信编译器会做这种优化,除非
TestFunction无条件地返回一个编译时常量或类似的。如前所述,可能会有副作用,或者每次调用时返回的值都会发生变化。在这些情况下,优化会改变程序的行为。 -
@Default:事实上,这两条代码通常做不同的事情。因此,如果没有其他信息,这个问题并不真正合法。
标签: c++ function variables call local