给出以下代码
int j = 0;
for (int i = 0; i < str.Length; ++i) {
if (i==j) {
Console.WriteLine ("equal");
}
j++;
}
我希望++i
将i
从初始0
更改为1
,从而将i==j
评估为false
。
但事实并非如此。为什么呢?
答案 0 :(得分:12)
如果您有for (a; b; c) { d; }
形式的循环,则可以将其视为以下while
循环:
a;
while(b) {
d;
c;
}
正如您所看到的,直到第一次迭代之后才会出现增量,无论是增量前还是后增量。
答案 1 :(得分:3)
++i
(或第3段中的任何内容)。
无论如何,即使在if
之前进行评估,它仍然无法按照您的想法运作。
执行i++
或++i
不会改变任何内容,因为它会在使用之前进行评估。
当你像这样使用它时,真正的区别在于:
int i = 0;
if (i++ == 0) { /* True because the old value of "i" was used to compare */ }
i = 0;
if (++i == 0) { /* Not true because "i" got changed to 1 before the compare. */ }
答案 2 :(得分:2)
i++
递增并评估(即结果,类似于return
)i
的旧值++i
递增并评估为i
的新值语句i++;
和++i;
是相同的,因为您不使用结果,因此唯一重要的部分是它们都增加i
。在for
循环中使用的方式,您将它们用作独立语句,您没有使用表达式i++
/ ++i
的值。
答案 3 :(得分:0)
在增量之前评估比较。前缀或后缀没有区别。