C++中逻辑表达式计算时使用短路计算规则,即对类似A&&B&&C的计算过程是从左到右,期间如果A==false则无需计算后续的B和C,同理只有A和B都为true才计算C; 对类似A||B||C的计算类似,不过换做若A==true则不计算B和C, 只有当A和B都为false的时候才计算C。
初始x=y=z=1;
--x && ++y && ++z; 首先计算--x=0=false所以++y和++z不执行,结果为x=0, y=z=1
++x && ++y && ++z; 首先++x=1, 继续++y=2, 继续++z=2, 结果为x=1, y=z=2
++x && y-- || ++z; &&的优先级高于||,所以等价于(++x && y--) || ++z, 先算括号里的++x=2, 继续计算y--=2, y=1, 括号里是true,所以++z不执行, 结果为x=z=2, y=1
我们一个一个来
首先是第一个:--x && ++y && ++z
首先计算--x,所以x = 0。此时整个算式是false,所以后半部分不做计算。
第二个:++x && ++y && ++z
++x使得x = 1所以是true,继续计算,y=2,true;z=2true。
第三个: ++x && y-- || ++z
++x,x=2true,继续计算y--。这里注意,是使用y的原始值判断后再做--操作,所以依然是true,y=1。此时||运算的左半部份是ture了,所以右边不做计算,z依然是2.
就是看-- ++ || &&的优先级,以及++X与X++的运算啊。。这个自己查哈,简单