问题 C#帖子增量[重复]


这个问题在这里已有答案:


6342
2017-12-25 10:57


起源



答案:


假设 i 有价值 0 最初,就像你的例子中一样。

i++ == i 读 i (0),增量 i,读 i 再次(1),并比较这两个值: 0 == 1

i == i++ 读 i (0),读 i 再次(0),增量 i,并比较两个值: 0 == 0

增量发生了 立即 读完旧值后。


9
2017-12-25 11:05





回答你的第一段代码:

这里, bool b = i++ == i;0 == 1这是因为你知道 i++ 是一个后增量所以 i 遗迹 0 在 i++ 但是在那部分完成执行并且正在与右侧进行比较之后 i 此时,由于之前的后增量,该值已更改为1。这就是你得到的原因 False 做的时候: bool b = i++ == i;

像@hvd一样说: 读取旧值后立即发生增量


1
2017-12-25 11:08



在第二种情况下 bool b = i == i++; 即0 == 0,这是真的,然后发生增量。比如首先比较值,然后我增加但是在第一种情况下,它发生在其他方面 bool b = i++ == i; 即0 == 1它首先读取0然后递增i然后比较它到那时i增加到1这就是他得到假的原因。 - Aamerallous
这是正确的。如果您理解第一部分背后的概念,第二段代码是可自我理解的。它在大多数编程语言中都是相同的。这是一个基本的基本概念。 - Inconnu


答案:


假设 i 有价值 0 最初,就像你的例子中一样。

i++ == i 读 i (0),增量 i,读 i 再次(1),并比较这两个值: 0 == 1

i == i++ 读 i (0),读 i 再次(0),增量 i,并比较两个值: 0 == 0

增量发生了 立即 读完旧值后。


9
2017-12-25 11:05





回答你的第一段代码:

这里, bool b = i++ == i;0 == 1这是因为你知道 i++ 是一个后增量所以 i 遗迹 0 在 i++ 但是在那部分完成执行并且正在与右侧进行比较之后 i 此时,由于之前的后增量,该值已更改为1。这就是你得到的原因 False 做的时候: bool b = i++ == i;

像@hvd一样说: 读取旧值后立即发生增量


1
2017-12-25 11:08



在第二种情况下 bool b = i == i++; 即0 == 0,这是真的,然后发生增量。比如首先比较值,然后我增加但是在第一种情况下,它发生在其他方面 bool b = i++ == i; 即0 == 1它首先读取0然后递增i然后比较它到那时i增加到1这就是他得到假的原因。 - Aamerallous
这是正确的。如果您理解第一部分背后的概念,第二段代码是可自我理解的。它在大多数编程语言中都是相同的。这是一个基本的基本概念。 - Inconnu


后缀和等式运算符的求值顺序是从左到右,因此代码的行为与代码注释中的说明相同。

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

1
2017-12-25 11:19