考虑以下伪代码:
int x = 10;
int y = 10;
x = x + x++;
y = y++ + y;
print(x); // 20
print(y); // 21
像C#或Java这样的类C编程语言说增量优先于+
运算符。所以在两种情况下都应该是21
。
为什么会打印两种不同的结果?
答案 0 :(得分:7)
请记住,我们从左到右工作。
让我们首先处理x然后y。
x = x + x ++;
我们从左到右......
x = 10 +(10 ++)
注意:当我们从左到右时,最右边x上的后增量运算符对首先出现在RHS上的x没有影响。
x = 20
y = y ++ + y;
y = 10 ++ + 11;
我们再次从左向右,增量运算符post将y从10增加到11,因此最右边的y变为11,因此产生(10 + 11)= 21。
答案 1 :(得分:0)
我认为+
运算符的优先级高于++
,因此首先评估+
运算符,但为了对其进行求值 - 它必须评估左右运算符它
在第二个示例中,首先计算左侧运算符,以便在评估右侧之前y
递增。
在Precedence and Order of Evaluation文档中,您可以看到+
高于+=
,这基本上是++
。 +
上方是前缀 ++
,不得与后缀 ++
混淆。
答案 2 :(得分:0)
评估y++ + y
时,会在y++
之前评估y
。因此,左侧评估为10,右侧将由于先前的增量而评估为11。
评估x + x++
时,x
之前会评估x++
。因此,双方将被评估为10,然后x
将在=
操作数将x
评估为20之前评估为11。