我可以在“for”循环中有两个初始化语句吗?

时间:2014-12-07 18:55:22

标签: c++ for-loop statements

在C ++中,for循环通常采用以下形式的三个语句:

for (init; condition; step)
{
Loop statements
}

我可以在init的位置放置两个或多个语句吗?我们想说我想定义两个起始变量ab。为此,我会使用int a = 1; int b = 5;。但是,由于语句之间存在;,因此C ++会将int b = 5解释为条件语句。有没有办法将整个陈述聚集到init,也许是通过使用括号?是否可以为step做类似的事情?

注意:我知道在调用for之前我可以初始化变量。但是,我觉得将循环相关语句放在循环的定义中会更合乎逻辑。

6 个答案:

答案 0 :(得分:4)

尝试for (int a =1, b=5; condition; a++,b++) {}

更新

并非一切皆有可能,但通过调用内部函数可以实现一些非常棒的事情。

void bar() { /* some of the code you want */ }

int main(int argc, char **argv) {
  int i = 0;
  for(bar();i < 10; i++) {
    // your stuff
  }
}

如果你考虑使用C ++ 11,你可以在初始化变量的地方定义和调用一个未命名的函数,如下所示:

int a = 0, b = 1;
for ([&a, &b]{ a = b++; b = foo(a); }(); b < 10; a++) {}

虽然我没有看到这样做有什么好处。

答案 1 :(得分:3)

不,你只能有一个初始化声明。但是,通常可以使用逗号运算符来实现所需的结果:

for(int foo = 7, bar = 42; ...; ...) {
    ...
}

甚至

int foo;
double bar;
for(foo = 7, bar = 42; ...; ...) {
    ...
}

不可能的是在初始化语句中声明两个不同类型的变量:

//Illegal code!
for(int foo = 7, double bar = 42; ...; ...) {
    ...
}

答案 2 :(得分:1)

你可以根据需要拥有两个以上的INITIALIZING语句, 但用逗号,

分隔它们
for(a=1, b=25, c='C', d=25.0; b>a; a++){
}

但是你不能有多个声明语句,声明的变量必须在第一个语句中:

for(int a=1, b=25, c='C', d=25.0; b>a; a++){}

不是:

for(a=1, int b=25, c='C', d=25.0; b>a; a++){} // wrong !

,,,

您也可以有多种条件或说明, 这是一个例子,后两个测试没有效果,但它只是用于演示:

int i;
for(char a='A', i=0; i<26 || a+i<='Z' && a+i>='A' ;i++ , printf("-") ){
    printf("%c", a+i);
}

这将打印:A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z -

,,,

祝你好运,

答案 3 :(得分:0)

用逗号分隔。

for(grunt, snarl; foo; goo) {
}

答案 4 :(得分:0)

 for(<initialization> ; <condition> ; <increment/decrement variables>){}

变量的初始化和递增/递减可以用逗号分隔。    但条件是单一的,即。我们不能用逗号分隔多个条件。

e,g.  for(i=1,j=2,k=3,l=4;j<6;k++,j--,++i,l++){}.  

答案 5 :(得分:0)

如果声明了多个类型,则不能有更多的初始化语句。 你可以模仿以下黑客攻击

for (struct { int a; char b; } i = {1, 'x'}; i.a < 15; ++i.a, ++i.b) 
{
    // ...
}

这样,您使用未命名的结构来聚合各种类型的多个变量,是的,这是valid C++