逻辑表达式短路求值问题

例:
问:x=1,y=1,z=1, 执行表达式w=++x||++y&&++z 后,x、y、z的值分别为什么?

【逻辑表达式短路求值问题】答:
x=2; y和Z的值不变;
逻辑运算++x的值为1,因此后面的语句没有执行;

参考解释:
短路求值
作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:

expr1 && expr2

expr2将不会进行求值,因为整个逻辑表达式的值已经可以确定为0。 类似地,如果expr1的值不是0,那么在下面的这个逻辑表达式的求值过程中:

expr1 || expr2

expr2将不会进行求值,因为整个逻辑表达式的值已经确定为1。
下面是一个简单的可能会出现短路求值的例子。假如我们需要处理的字符数量不超过5个。

int cnt =0;
while (++cnt<=5&&(c=getchar())!=EOF)
{
...

当表达式++cnt<=5的值是假时,下一个字符就不会被读取。

    推荐阅读