我有一个包含
的代码bool fn()
{
...
//all the following are boolean functions.
return isTrue()
&&isMsgReceived()
&&isMsgSent();
}
问题是每个返回布尔函数本身都很冗长并且计算量很大。实际上,如果之前的功能已经失败(and
条件),则检查后续功能是没有意义的。
如果其中一个初始函数已经失败并且没有进一步检查,您是否建议更简单的方法返回false
。目的是减少计算时间。
答案 0 :(得分:25)
&&
已经为您做到了。如果isTrue()
返回false
,则后续的两个函数甚至不会被评估。
因此,将最便宜的函数放在&&
s的链中是有意义的。
答案 1 :(得分:10)
您的代码已经这样做了。
标准明确说明:
5.14逻辑AND运算符[expr.log.and]
&&操作员组从左到右。操作数都在上下文中转换为bool(第4条)。如果两个操作数都为真,则结果为
true
,否则为false。与&
不同,&&
保证从左到右评估:如果第一个操作数为false
,则不评估第二个操作数。
然后,如果isTrue()
被评估为false
,则不会评估下一个函数。
然后您应该首先使用最便宜的功能。