更好的 if 条件算法

Better algorithm for if condition

本文关键字:算法 条件 if 更好      更新时间:2023-10-16

我有一个代码,其中包含

bool fn()
{
...
//all the following are boolean functions.
return isTrue()
       &&isMsgReceived()
       &&isMsgSent();
}

问题在于每个返回布尔函数本身都相当冗长,并且需要大量计算。实际上,如果前一个函数已经失败(and条件),则检查后续函数是没有意义的。

您是否会建议更简单的方法来返回false,以防其中一个开始函数已经失败并且不进行进一步检查。目的是减少计算时间。

&&已经为你做到了。如果isTrue()返回false,接下来的两个函数甚至不会被计算。

因此,将最便宜的函数放在&&链中的第一位是有意义的。

你的代码已经这样做了。

该标准明确指出:

5.14 逻辑 AND 运算符 [expr.log.and]

&

&运算符从左到右分组。操作数都根据上下文转换为 bool(第 4 条)。如果两个操作数都为真,否则为假,则结果true。与&不同,&&保证从左到右的求值:如果第一个操作数false,则不计算第二个操作数。

然后如果isTrue()被计算为false,下一个函数将不会被计算。

然后,您应该首先放置最便宜的函数。