if条件的更好算法

时间:2013-09-08 16:08:20

标签: c++ c algorithm

我有一个包含

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

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

如果其中一个初始函数已经失败并且没有进一步检查,您是否建议更简单的方法返回false。目的是减少计算时间。

2 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:10)

您的代码已经这样做了。

标准明确说明:

  

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

     

&&操作员组从左到右。操作数都在上下文中转换为bool(第4条)。如果两个操作数都为真,则结果为true,否则为false。与&不同,&&保证从左到右评估:如果第一个操作数为false,则不评估第二个操作数。

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

然后您应该首先使用最便宜的功能。