例如,在下面的代码中
int x,y,z;
x=y=z=1;
z = ++x && ++y || ++z;
cout<<x<<y<<z;
输出为2 2 1。
我想这是因为编译器知道'++ x&amp;&amp; ++ y'给出'true',因此它跳过剩余的行|| ++z
。
但是,如果我用下面的代码替换它:
z = ++x && ++y && ++z;
输出仍为2 2 1。 不应该是2 2 2,因为必须评估ANDs'++ x','++ y','++ z'的所有部分。
答案 0 :(得分:1)
我想这是因为编译器知道&#39; ++ x&amp;&amp; ++ý&#39;给出了一个真实的&#39;,所以它跳过剩下的行&#39; || ++ž&#39;
那是对的。它不一定在编译时完成,它可以在更复杂的情况下在运行时执行(因为编译器不能保证知道每个变量中的值。
这不是z == 1
的原因。
您正在设置z = ++x && ++y && ++z
,它会隐式地将&&
生成的布尔值转换为整数。布尔true
的整数表示形式为1
,因此z == 1
。