for循环中的前缀和后缀自增

本文关键字:后缀 前缀 循环 for | 更新日期: 2023-09-27 18:09:40

给定以下代码

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

但事实并非如此。为什么?

for循环中的前缀和后缀自增

如果你有一个形式为for (a; b; c) { d; }的循环,你可以把它当作以下while循环:

a;
while(b) {
    d;
    c;
}

正如您所看到的,增量直到第一次迭代之后才会发生,无论它是前增量还是后增量。

++i(或第三段中的任何内容)将在第一次迭代之后才被计算。

无论如何,即使它在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. */ }
  • i++递增并求值为(即结果与return相似)i
  • ++i递增并求值为i

语句i++;++i;是相同的,因为您不使用结果,所以唯一重要的部分是它们都增加i。在for循环中使用,您使用它们作为独立语句,您不使用表达式i++/++i的值。

比较在递增之前求值。前缀或后缀没有区别