for循环中的C ++逗号及其等价表达式?

时间:2018-06-13 00:56:20

标签: for-loop

所以我想知道这个for循环的等价表达式是什么我老实说从来没有见过循环写这种方式,因为我猜不足。

以下是代码:

    string convertToBase7(int num) {
     int res = 0;
    for(int i=0; num!=0; res += pow(10,i++)*(num % 7), num /= 7) {}
    return to_string(res);
}

在每次迭代按照写入的顺序执行分号后的状态也是如此?同样在i = 2时,res + = pow(10,3)?这是对的吗?

1 个答案:

答案 0 :(得分:1)

所以如果你有:

for (int i = 0, j = 0; i < 5 && j < 3; ++i, ++j)

类似于:

int i = 0, j = 0;
while (i < 5 && j < 3) {
    ++i;
    ++j;
}
  

在每次迭代按照编写顺序执行分号后,这些语句也是如此?

从上面的代码中可以看到

  

同样在i = 2时,res + = pow(10,3)?这是对的吗?

不一定是因为不保证i在传递给函数之前会增加。看一下这个: Order of operations for pre-increment and post-increment in a function argument?

你也有这个问题

num != 0;

如果分裂会发生什么:

num /= 7;

意外地跳过零,因此我建议您执行以下操作:

num > 0;

因此,综合以上所有内容,我会写下这一行:

for(int i=0; num!=0; res += pow(10,i++)*(num % 7), num /= 7) {}

如下:

 for(int i=0; num!=0; ++i, res += pow(10,i)*(num % 7), num /= 7) {}

如果我需要确保i在传递给函数之前递增,或者。:

for(int i=0; num!=0; res += pow(10,i)*(num % 7), ++i, num /= 7) {}

如果我需要确保i在传递给函数后递增。