ANSI标准是否要求逻辑运算符在C或C++中被短路?
我很困惑,因为我记得K&R的书说你的代码不应该依赖于这些操作被短路,因为它们可能没有.有人可以指出标准中的哪个位置逻辑操作始终是短路的吗?我最感兴趣的是C++,C的答案也很棒.
我还记得读(不记得在哪里)评估顺序没有严格定义,所以你的代码不应该依赖或假设表达式中的函数将按特定的顺序执行:在语句的末尾所有引用的函数将被调用,但编译器可以自由选择最有效的顺序.
标准是否表明该表达式的评估顺序?
if( functionA() && functionB() && functionC() ) cout<<"Hello world";
Run Code Online (Sandbox Code Playgroud) c c++ operator-precedence short-circuiting logical-operators
我有一个包含的代码
bool fn()
{
...
//all the following are boolean functions.
return isTrue()
&&isMsgReceived()
&&isMsgSent();
}
Run Code Online (Sandbox Code Playgroud)
问题是每个返回布尔函数本身都很冗长并且计算量很大.实际上,如果之前的功能已经失败(and条件),则检查后续功能是没有意义的.
false如果其中一个开始的函数已经失败并且没有进一步检查,你会建议更简单的返回方法吗?目的是减少计算时间.