我能改变for循环的起始条件吗?

时间:2016-12-02 08:42:08

标签: c++ for-loop

我的代码中有这个

for (int i=max_position; i<N; ++i) { ... }

但是,在循环内部我将更新max_position的值,这会影响我的for循环吗?

6 个答案:

答案 0 :(得分:5)

来自n4296这是C ++ 14标准草案(尽管每个版本的C ++和C都有相同的措辞)。

  

for statement

 for ( for-init-statement condition(opt); expression(opt)) statement
     

相当于

 {
     for-init-statement
     while ( condition ) {
         statement
         expression ;
     }
 }
     

除了在for-init-statement中声明的名称相同   声明性区域为声明的区域   条件,除了语句中的continue (未包含在另一个迭代语句中)   在重新评估条件之前执行表达式。 [注意:因此第一个语句指定初始化   循环;条件(6.4)指定在每次迭代之前进行的测试,以便在循环时退出   条件变得虚假;表达式通常指定在每次迭代后执行的递增。    - 结束说明]

如您所见,初始化i后,修改用于初始化它的表达式中使用的变量将不起作用。 (这是标准实际上非常清楚的地方之一。)

答案 1 :(得分:2)

不,初始化 int i = max_position将只执行一次; 如果您想影响循环,请尝试撤消

 for (int i = N - 1; i >= max_position; --i) {
   ...
 }
在每次迭代时都会检查此向后循环中的

i >= max_position 条件

答案 2 :(得分:1)

不,它不会,因为你说i =最大位置而for循环使用i变量而不是max_position变量

答案 3 :(得分:0)

不,不。 for循环中的第一个语句只执行一次。

设置i后,更改用于设置i的变量的值不会影响i

您可以在i循环体内明确更改for的值。

答案 4 :(得分:0)

不,它不会以某种方式影响周期,因为int i在使用max_position进行周期运行之前初始化一次,然后max_position不再对周期产生影响。

答案 5 :(得分:0)

更改i而不是启动条件,更改max_position赢得的效果:

for(i = max_position;i<N;i++){
   if(smthHappened)
      i+=3;
}