int value = 0;
foreach (QString string, stringlist)
if(value < this->returnMaximum(Timer.value(string)->Ok->elapsed(),
Timer.value(string)->Nok->elapsed(),
Timer.value(string)->Err->elapsed()))
value = this->returnMaximum(Timer.value(string)->Ok->elapsed(),
Timer.value(string)->Nok->elapsed(),
Timer.value(string)->Err->elapsed());
或
int value = 0;
foreach (QString string, stringlist)
{
int max = this->returnMaximum(Timer.value(string)->Ok->elapsed(),
Timer.value(string)->Nok->elapsed(),
Timer.value(string)->Err->elapsed()));
if(value < max)
value = max;
}
和
inline int returnMaximum(int _a, int _b, int _c)
{
int max = _a;
(max < _b) && (max = _b);
(max < _c) && (max = _c);
return max;
}
显然在第二个中你减少了一个函数调用,但我想知道一个函数调用是否会花费我很多,因为坦率地说我喜欢第一个函数调用。
答案 0 :(得分:3)
如果编译器是天真的,第一个解决方案要求你调用大约7个其他函数(可能自己调用函数)。除此之外,函数参数中还有6个其他间接参数。但实际上,它在很大程度上取决于功能。编译器可能会改善你的情况。
然而,对于所有问题,这个问题要快得多,您应该对特定代码进行测量。如果您不经常使用此代码段,则无需对其进行大量优化。
除此之外,我会问自己第一个或第二个代码片段是否更具可读性。在可读性方面,我会选择第二个解决方案。
答案 1 :(得分:0)
第二次通话更便宜。在第一个示例中,您在此函数中还有一个函数调用+计算。所以在这种情况下,你需要做两次工作。
答案 2 :(得分:0)
如果你肆无忌惮地进行基准测试,请参阅。
根据经验,如果在优化后它们没有达到相同的效果,那么你可以期望第二个表现更好。如果returnMaximum
函数没有内联,这可能会阻止优化器确定是否真的需要第二个函数调用。
答案 3 :(得分:0)
第一个应该稍快一些。但差异可能只在一个非常基本的编译器上。优化之后两者在现代编译器中实际上可能最终相同。为了获得准确的结