转载https://zhidao.baidu.com/question/426219427238900292.html
提问:
这个程序里面,为什么不先执行(++y)&&(++x)?程序先判断了x>y,然后后面的那部分表达式就被短路了。&&不是比||优先级高吗?请问怎么解释。
回答:
C/C++在逻辑判断表达式上有个短路效应
A || B,当A为逻辑真时,整个表达式的值已经可以确定为真,B就不执行了
A && B,当A为逻辑假时,整个表达式的值已经可以确定为假,B就不执行了
这里x>y为真,所以后面的(++y)&&(++x)就不执行了。
追问
当&&和||同时存在的时候,即 A || B && C 的时候,为什么不是先计算B&&C?
追答
如果A已经是逻辑真,就没必要再计算B&&C了。虽然&&的优先级比||高,用括号括起来看是这样:(A) || (B && C),
A和B&&C是同等优先运行的表达式,按照从左至右的运行规则,先计算A,发现A为逻辑真后,B&&C就不执行了。
优先级高只是结合(律)的问题(即括号怎么放的问题),但不是计算的先后顺序。