我正在读这篇文章 Precedence of && over || 。它说尽管&&&超过||,我们需要从左到右评估表达式,如果第一个表达式是真的,那么我们不需要评估第二个表达式。 但优先级是评估的顺序,因此应首先评估所有预增量,然后评估(++ j&& ++ k)。在这一点上,这个帖子似乎含糊不清。不是吗?
答案 0 :(得分:1)
来自标准
§5.14逻辑AND运算符
&&
运算符组从左到右。操作数都在上下文中转换为bool
。如果两个操作数都为真,则结果为true,否则为false。与&
不同,&&
保证从左到右的评估:如果第一个操作数为false,则不评估第二个操作数。结果是
bool
。如果评估第二个表达式,每个值计算和与第一个表达式相关的副作用在每个值计算和与第二个表达式相关的副作用之前都会被排序。
所以,在你的例子中:
(++j && ++k)
第一次评估将是
++j
然后(假设j
未成为0
,因此为假)
++k
然后
j && k // with both values incremented