【问题标题】:How does pre-increment operator work with variable assignment like a += ++a? [duplicate]预增量运算符如何处理像 += ++a 这样的变量赋值? [复制]
【发布时间】:2020-03-16 04:33:39
【问题描述】:

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

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

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

【问题讨论】:

  • 另见密切相关的stackoverflow.com/questions/33783989/…。更一般地说,当您不确定此类事情时,您应该阅读语言参考。文档清楚地说明了评估的确切顺序和运算符优先级。

标签: c# .net


【解决方案1】:

嗯,a += n 等价于a = a + n

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

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

将您的值替换为a,我们得到a = 0 + (0 + 1);

记住operands in an expression are evaluated from left to right。 Eric Lippert 深入评估订单here

这在实践中意味着什么?

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

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

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

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

Try it online

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 2018-06-09
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多