C# Post 增量

C# Post Increment

当我在一个简单的控制台应用程序中测试 post 增量运算符时,我意识到我不理解完整的概念。我觉得很奇怪:

int i = 0;
bool b = i++ == i;
Console.WriteLine(b);

输出是错误的。我已经预料到这是真的。 AFAIK,在第 2 行,由于 post 递增,编译器进行比较并在 i 递增 1 后将 b 分配给 true。但显然我错了。 之后我这样修改代码:

int i = 0;
bool b = i == i++;
Console.WriteLine(b);

这次输出一直为真。与第一个样本相比有何变化?

假设 i 最初的值为 0,就像您的示例中那样。

i++ == i读取i0),递增i,再次读取i1),然后比较两者值:0 == 1.

i == i++读取i0),再次读取i0),递增i,然后比较两者值:0 == 0.

读取旧值后立即增加。

回答您的第一段代码:

在这里,bool b = i++ == i;0 == 1,这是因为如你所知,i++是一个post增量,所以i仍然是0i++ 但在该部分完成执行并将其与右侧 i 进行比较之后,此时由于先前的 post 增量,该值已更改为 1 .这就是为什么您在执行以下操作时得到 False 的原因:bool b = i++ == i;.

如@hvd 所说:读取旧值后立即发生增量

后缀和相等运算符的计算顺序是从左到右,因此代码的行为如代码注释中所述。

int i = 0;
bool b = i++ == i;
// 1.) i++ returns old value i.e. 0
// 2.) but after that it increments and becomes 1
// 3.) hence, bool b = 0 == 1; --> evaluates to false
Console.WriteLine(b); // prints false

int i = 0;
bool b = i == i++;
// 1.) i returns old value i.e. 0
// 2.) i++ returns old value i.e. 0, as this is the end of the statement after that it would increment
// 3.) hence, bool b = 0 == 0; --> evaluates to true
Console.WriteLine(b); // prints true