首页 > 解决方案 > 预增量运算符如何处理像 += ++a 这样的变量赋值?

问题描述

作为初学者,我很难理解下面的代码。我预计a增量两次,结果将是 2,但事实并非如此。

var a = 0;
a += ++a;
Console.WriteLine(a); // 1

似乎删除了一个值。这怎么理解?

标签: c#.net

解决方案


嗯,a += n相当于a = a + n

a += ++a;因此等价于a = a + ++a;

反过来,这相当于a = a + (a + 1);

代入你的值a,我们得到a = 0 + (0 + 1);

请记住,表达式中的操作数是从左到右计算的Eric Lippert 在这里深入探讨了评估顺序。

这在实践中意味着什么?

好吧,如果我们写a = a + ++a;,a会变成1因为第一个a在求值时是 0,然后在 中变成 1 ++a,意思是整体赋值是 的值1

如果我们稍微反转一下,然后写a = ++a + a;then++a将计算1,当我们到达第二个a时,它已经1是 ,这意味着我们实际上有a = 1 + 1;,所以我们得到 2。

您可以使用以下代码进行验证:

var a = 0;
a = a + ++a;
var b = 0;
b = ++b + b;
Console.WriteLine(a); // 1
Console.WriteLine(b); // 2

在线尝试


推荐阅读