【发布时间】:2013-10-07 09:59:54
【问题描述】:
以下两行代码没有返回相同的值。有什么理由吗?
int i;
i = 1;
i = i + i++; //Returns 2, expecting 3
和
i = 1;
i = i++ + i; //Returns 3
从语义上讲,这应该是相同的a + b = b + a 对吧?
同样减少i:
i = 1;
i = i - i--; //Returns 0, expecting 1
和
i = 1;
i = i-- - i; //Returns 1, expecting -1
更让我困惑的是后自增运算符的用法:
i = 1;
i = i + ++i; //Returns 3
和
i = 1;
i = ++i + i; //Returns 4, expecting 3
减号运算符也一样:
i = 1;
i = i - --i; //Returns 1
和
i = 1;
i = --i - i; //Returns 0, expecting -1
最后一个问题:
编译器如何解释这两行?
i = i+++i; // is it i + ++i or i++ + i?
i = i---i; // is it i - --i or i-- - i?
【问题讨论】:
-
几乎是 stackoverflow.com/q/13516689/11683 和 stackoverflow.com/a/3346729/11683 的副本(最后一个来自 Eric Lippert,必读)。
-
i = 1; i = i + i++为什么会在这里看到3? -
这只是表明你不应该将
++和/或--与一个变量一起使用,该变量也在同一表达式的其他地方使用。太难读了。
标签: c# operators increment decrement