很显然,b应该等于6
t=(a=w>x)&&(b=y>z)按照一般的左-》右编译器计算顺序,t=(a=w>x)&&(b=y>z)等价于
t = ((a=w>x)&&(b=y>z));
(a=w>x)&&(b=y>z)在计算时,(a=w>x)将会先于(b=y>z)计算;
a=w>x,由于=的优先级最低,w>x先计算,也就是说a最终将会等于bool值false,也就是0;
(a=w>x)&&(b=y>z),由于(a=w>x)已经等于false,不管(b=y>z)等于多少,这个表达式都将始终是false.因此,所有编译器对这个处理进行了优化处理,(b=y>z)将不会执行,显然b还是等于初始值6.
你可以用VC/VS,或者gcc编写一个小程序试试.