int i=-1,j=-1,k=0,l=2,m;
m=l++||i++ && j++ && k++;
printf("%d %d %d %d %d",i,j,k,l,m);
代码输出为:-1 -1 0 3 -1
我的问题是,即使i++
的优先级高于j++
,k++
&&
和||
也未被评估?
答案 0 :(得分:1)
基本上发生的事情是,当l ++ = 3不是0时,它的计算结果为True(只有0才是False)。因此,||之后的表达式的第二部分没有评估。
答案 1 :(得分:1)
想想
m=l++||i++ && j++ && k++;
as
m = ( (l++)|| ( (i++ && j++) && (k++) ) );
如您所知&&
具有更高的运算符优先级,因此i++ && j++ && k++
将被分组为(i++ && j++) && k++
,然后( (i++ && j++) && (k++) )
。
由于||
的短路行为,在评估l++
后,true
因此是正确的操作数((i ++&& j ++)&&(k ++) )||
未评估。