【发布时间】:2014-07-06 03:22:01
【问题描述】:
例如在下面的代码中
int x,y,z;
x=y=z=1;
z = ++x && ++y || ++z;
cout<<x<<y<<z;
输出为 2 2 1。
我猜这是因为编译器知道 '++x && ++y' 给出了 'true',所以它跳过了剩余的行 || ++z。
但是,如果我用下面的代码替换它:
z = ++x && ++y && ++z;
输出仍然是 2 2 1。 不应该是 2 2 2,因为 AND 的所有部分 '++x' , '++y' , '++z' 都必须进行评估。
【问题讨论】:
-
不,
++x && ++y仍然为真,因此不会评估++z。 -
我真的不明白你的要求?!?请详细说明! ...
-
我看不出投反对票的原因 - 这是关于意外类型切换的常见错误。
-
顺便说一句,这是未定义的行为。 (
z在序列点之间被多次修改。) -
@n00dle 它很常见,以至于它至少有 10384762488575 个单独的答案,并且在 Stack Overflow 周围都有重复。 再问一次也没有意义。
标签: c++ pre-increment