使用布尔值稍后返回还是调用函数并立即返回更快?C++

Is it faster to use a bool and return later or call function and return immediately? C++

本文关键字:返回 C++ 函数 调用 布尔值      更新时间:2023-10-16

我有一个问题,理论上哪种方法运行起来更快?我有一个非常占用 CPU 的功能,它在某些条件下无法运行。基本上我要问的是,只复制在同一函数中多次使用许多参数的调用代码更快,还是只使用布尔值使程序集更小更快?谢谢

bool ShouldNotDoExpensiveFunction = false;
if (!somefunction())
{
ShouldNotDoExpensiveFunction = true;
}
else if (!somefunction2())
{
ShouldNotDoExpensiveFunction = true;
}
else if (!somefunction3())
{
ShouldNotDoExpensiveFunction = true;
}
else if (!somefunction4())
{
ShouldNotDoExpensiveFunction = true;
}
if (!ShouldNotDoExpensiveFunction)
{
return RunExpensiveFunction(1, 2, 3, 4, 5, 6, 7, 8, 9);
}
else
{
return RunInexpensiveFunction(1, 2);
}
or

if (!somefunction())
{
return RunInexpensiveFunction(1, 2);
}
else if (!somefunction2())
{
return RunInexpensiveFunction(1, 2);
}
else if (!somefunction3())
{
return RunInexpensiveFunction(1, 2);
}
else if (!somefunction4())
{
return RunInexpensiveFunction(1, 2);
}
else
{
return RunExpensiveFunction(1, 2, 3, 4, 5, 6, 7, 8, 9);
}

这两个代码段可能具有相当的性能。由于您的函数非常占用 CPU,因此这些方法之间的潜在边际差异很可能微不足道。编译器甚至可以为每个程序集生成相同的程序集。

前者优于后者不是因为性能原因,而是因为您避免重复参数,从而使代码不那么脆弱。

有一种更好的方法不需要任何重复:

return somefunction() && somefunction2() && somefunction3() && somefunction4()
? RunExpensiveFunction(1, 2, 3, 4, 5, 6, 7, 8, 9)
: RunInexpensiveFunction(1, 2);