我的代码中有这个
for (int i=max_position; i<N; ++i) { ... }
但是,在循环内部我将更新max_position
的值,这会影响我的for循环吗?
答案 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;
}