是否有任何由标准或数学规则定义的布尔句子?例如:
if (firstTrue && secondTrue)
{
}
Run Code Online (Sandbox Code Playgroud)
我可以确定首先检查firstTrue吗?
Pra*_*rav 14
是.&&并且||是短路运营商.操作数的评估顺序是明确定义的(从左到右).
&&也是一个序列点.
所以写作if( ++i && i) { }完全没问题.
ISO C++ 03(5.14/1)说:
&&运算符从左到右分组.操作数都隐式转换为bool类型(第4节).如果两个操作数都为真,则结果为true,否则为false.与&不同,&&保证从左到右的评估:如果第一个操作数为假,则不评估第二个操作数.
编辑 :(看到评论后)
ISO C++ 03(部分1.9/18)说
在评估每个表达式时
a && b
a || b
一个 ?b:c
a,b
使用这些表达式(5.14,5.15,5.16,5.18)中运算符的内置含义,在评估第一个表达式后有一个序列点.
是的firstTrue将首先进行评估.实际上,如果firstTrue为false,则甚至不会评估secondTrue.这称为短路.
看看这篇文章:http://en.wikipedia.org/wiki/Short-circuit_evaluation
同样的事情发生在||.如果第一个参数||为true,则不会计算第二个参数.