在FOR循环中声明变量

Declaring variable in FOR loop

本文关键字:声明 变量 循环 FOR      更新时间:2023-10-16

我知道在C++中,您可以在FOR内部的变量上声明,例如:

for(int i=0; i<10; i++)

有什么方法可以在for中声明另一个变量吗?这对我不起作用:

for(int i=0, char Ch='J'; i<10; i++)

您可以使用std::pair:

for (std::pair<int, char> p(0, 'j'); p.first < 10; p.first++)
{
}

简单的解决方案是在for:之外创建一个范围

{
    char Ch = 'j';
    for (int i = 0; i < 10; i++)
    {
    }
}

不可以。你可以这样做:

char Ch='J';
for(int i=0; i<10; i++)

问题是,要声明不同类型的变量,需要用分号(;)来分隔这两个语句——逗号(,)声明相同类型的变量。但是分号在for标头中有不同的含义。

如果您关心作用域,也可以将其包含在块中。

答案是否定的,在foor循环中只能声明一种类型。不过,类型可以是一个结构,所以有一个奇怪的限制:

int main()
{
    for (struct {int i; char c; } s = {0, 'A'};
         s.i < 26; ++s.i, ++s.c) {
            std::cout << s.c;  // prints the alphabet
         }
}

但这不是你真正应该做的事情,只需在循环之前声明你需要的变量:)

int main()
{
   {
    int i = 0;
    char c = 'A';
    for (; i < 10; ++i) { /* ...*/ }
   }
}

请注意额外的一组副题-如果名称与周围范围中的变量发生冲突,则可以使用它们来限制变量的范围。

您可以声明另一个变量,但只能声明相同类型的变量,以下操作有效:

  for(int i=0, Ch='J'; i<10; i++)

但是Ch现在将是int

是和否。在;之间,你可以做任何事情。,可以做任何事,所以以下是可能的:

for(int i=0, j=10; i<5; ++i,--j) { ... }

但是,如果您需要具有不同类型的变量,则不能使用;来分隔子声明。

注意,即使是C++11 auto也无济于事:

#include <iostream>
using namespace std;
int main()
{
    for(auto i=0, c = "abcd"; i<3; ++i,++c)
        cout << *c;
    cout << endl;
    return 0;
}

导致编译错误:

inconsistent deduction for 'auto': 'int' and then 'const char*'

您可以使用","。

for(int i=0,x=0; i<x; i++)
...

我想说int I=0是在循环之外执行的。。。i的定义在进入循环之前执行。

您不能重新声明其他变量的数据类型,请尝试以下操作:

   for(int i = 0, j = 10; i < x; i++) {}