评估布尔句的顺序是什么?

The*_* do 5 c++ boolean

可能重复:
是否在C/C++中强制要求短路布尔运算符?和评估顺序?

是否有任何由标准或数学规则定义的布尔句子?例如:

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)中运算符的内置含义,在评估第一个表达式后有一个序列点.

    • 我可以使用序列点的参考吗?你似乎全都了解它们. (2认同)

    Sta*_*key 7

    是的firstTrue将首先进行评估.实际上,如果firstTrue为false,则甚至不会评估secondTrue.这称为短路.

    看看这篇文章:http://en.wikipedia.org/wiki/Short-circuit_evaluation

    同样的事情发生在||.如果第一个参数||为true,则不会计算第二个参数.