提问者:小点点

周期中的前增量和后增量有什么区别?


我的兴趣在于的循环时的区别。我知道使用后增量值,然后递增,操作返回一个恒定的前增量。

while (true) {
    //...
    i++;
    int j = i;
}

这里,j会在循环结束时包含旧的i还是后递增的i


共3个答案

匿名用户

由于语句i以结束;在您的示例中,使用前置增量还是后置增量没有区别。

当您使用结果时会出现差异:

int j = i++; // i will contain i_old + 1, j will contain the i_old.

vs:

int j = ++i; // i and j will both contain i_old + 1.

匿名用户

取决于你如何使用它们。

  • i制作副本,增加i,并返回副本(旧值)。
  • i增加i,并返回i。

在您的示例中,这一切都是关于速度的。i将比i更快,因为它不制作副本。

然而,编译器可能会优化它,因为您没有在示例中存储增量运算符的返回值,但这仅适用于int等基本类型。

匿名用户

理解的基本答案。递增运算符的工作方式如下:

// ++i
function pre_increment(i) {
    i += 1;
    return i;
}
// i++
function post_increment(i) {
    copy = i;
    i += 1;
    return copy;
}

一个好的编译器在检测到返回的值不会被使用时,会自动将i替换为i