c ++ for循环后增量预增量差

时间:2017-11-11 03:02:14

标签: c++ for-loop

我一直在寻找答案,但我越来越困惑。

我有这两个for循环

for (int i = 1; (i < 5) && move.from[i - 1]; i++) {
    int const departurePoint = move.from[i - 1];
    int arrivalPoint = move.to[i - 1];

    if (arrivalPoint < 0) { // A blot was hit
        arrivalPoint = -arrivalPoint;
        board[1 - turn][BAR - arrivalPoint]--; // Remove the blot
        board[1 - turn][BAR]++; // and place it on the bar */
    }

    board[turn][departurePoint]--; // Move our own checker
    board[turn][arrivalPoint]++; // to it's landing spot.
}

for (int i = 1; (i < 5) && move.from[i - 1]; ++i) {
    int const departurePoint = move.from[i - 1];
    int arrivalPoint = move.to[i - 1];

    if (arrivalPoint < 0) { // We hit a blot
        arrivalPoint = -arrivalPoint;
        board[1 - turn][BAR - arrivalPoint]++; // Replace the blot
        board[1 - turn][BAR]--; // remove it from the bar
    }

    board[turn][departurePoint]++; // Replace our own checker
    board[turn][arrivalPoint]--; // to it's original spot.
}

我的问题是:

  1. 在带有预增量的for循环语句中,当评估“move.from [i - 1]时,我是否已增加?”
  2. 我是否在声明正文中增加了?

3 个答案:

答案 0 :(得分:3)

您的简短问题是 i++++i之间的差异是表达式的值?

i++是增量前i的值 ++i的值是增量后i的值

示例:

int i = 2;
std::cout << i++ << std::cout; // shows 2
std::cout << i << std::cout; // shows 3

i = 2;
std::cout << ++i << std::cout; // shows 3
std::cout << i << std::cout; // shows 3

i----i运算符的工作方式相同。

答案 1 :(得分:2)

for (int i = 1; (i < 5) && move.from[i - 1]; i++ /*i increments here and nowhere else*/)

for (int i = 1; (i < 5) && move.from[i - 1]; ++i /*i increments here and nowhere else*/)

两个代码都是等价的。差异非常小,不适用于此示例。

i==3时,

++i表示: 4=i+1=(++i)然后i=4

i++表示: 3= i =(i++)然后i=4

在将其分配给另一个变量之前,它没有任何区别:

for(...; ...; k=i++)

for(...; ...; k=++i)

i+1表示:

i存储到临时变量中。将临时变量增加1。它读取i但不写入ii仅会在++--i=以及其他一些案例中发生变化。

答案 2 :(得分:0)

for循环有两个语句和一个表达式:

for(init_statement;condition_expresion;progress_statement){
 //...body...
}

该指令的语义与写作基本相同:

init_statement;
while(condition_expresion){
  //...body...
  progress_statement;
}

请注意,i++++i的副作用相同,变量i加1。当这两个指令用作表达式时,它们是不同的,i++在递增之前计算i的值,++i计算增量之后的值。这与for循环无关,因为progress语句的值被丢弃。