在这种情况下,后增量如何工作?[复制]

How does post-increment work in this case? [duplicate]

提问人:DenysB12 提问时间:10/22/2023 最后编辑:DenysB12 更新时间:10/22/2023 访问量:57

问:

            int value = 10;
            value = value++ + --value;
            Console.WriteLine(value);

我已经知道结果了,但我想问一下我对动作顺序的理解有多正确。 最初,value++ 返回当前值,即 10。在下一步中,它将递增。之后,优先级是 --value,这里我们减去 1,它将是 9,我们从前一个值写出 +1,也就是说,它将是 10,从左到右的最后一个动作是 10 + 10,对吧?或者 --value,立即存储 11 并从中减去 1?哪个选项是正确的?我是不是误会了什么?

C# 控制台 - 应用程序 增量 递减

评论

2赞 500 - Internal Server Error 10/22/2023
旁注:如果你(或你的代码的其他读者)没有立即看出它的作用,那么你可能不应该这样做。
0赞 Fildor 10/22/2023
我可能是错的,但您应该能够在调试器中单步执行时看到这些步骤。
0赞 DenysB12 10/22/2023
@Fildor,我在看台阶,但我没有看到它发生。它立即向我显示有 10 和 10,结果是 20。它没有给我理解
0赞 DenysB12 10/22/2023
有必要很好地理解这个话题,以便将来不会出现问题,它如何在同一周期中工作等。这就是我问的原因。

答:

-1赞 brett_0267 10/22/2023 #1

我想我明白了混乱是什么。这个例子可以澄清它:

int value = 10;
value = value++;
Console.WriteLine(value);
// Output: 10

value = 10;
value = ++value;
Console.WriteLine(value);
// Output: 11

在第一个块中,该值是递增的。它不会更新,因为我们将该值赋值为其当前值 10,然后递增它(这不会设置它或更新变量)。 在第二个块中,该值是预先递增的。所以我们先递增值,再赋值后赋值,使赋值为11。

当我们在上面的行 (value++) 中发布增量值时,我们说我们不会更新它的值,直到此操作之后。但是该赋值被我们在这一行中所做的赋值所覆盖。现在让我们看另一个例子来说明:

int value = 10;
value = value++;
Console.WriteLine(value);
// Output: 10
value++;
Console.WriteLine(value);
// Output: 11

当我们执行 value = value++ 时,我们正在覆盖运算符中将发生的赋值,因此它对值没有影响。

评论

0赞 Ry- 10/22/2023
是 ,不是.操作数是从左到右计算的,因此在执行时已经是 11 个。10 + 1010 + 9value--value
0赞 DenysB12 10/22/2023
好的,太好了,谢谢。
0赞 brett_0267 10/22/2023
好渔获,错过了。更新以防万一有人偶然发现我的第一个回复。