3

我有一个代码,其中包含

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

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

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

4

2 回答 2

25

&&已经为您做到了。如果isTrue()返回false,则甚至不评估接下来的两个函数。

因此,将成本最低的函数放在 s 链的首位是有意义&&的。

于 2013-09-08T16:09:22.440 回答
10

您的代码已经这样做了。

该标准明确表示:

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

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

然后如果isTrue()评估为false,则不会评估下一个函数。

然后,您应该首先放置最便宜的功能。

于 2013-09-08T16:19:07.450 回答