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

Can I have two initializing statements in a "for" loop?

本文关键字:两个 初始化 语句 for 循环 我可以      更新时间:2023-10-16

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

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

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

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

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

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

甚至

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

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

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

请尝试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++) {}

不过,我看不到这样做有任何好处。

你可以

有两个以上的初始化语句,只要你愿意,但用逗号分隔它们,

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-

,,,

祝你好运

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

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

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

不能有多个初始化语句,其中声明了多个类型。但是,您可以使用以下技巧来模仿它:

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

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

用逗号分隔。

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