在FOR循环中声明变量

4
我知道在C++中,你可以在FOR循环内部声明变量,例如:

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

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

在 for 循环中声明其他变量有没有什么办法?这种方式对我来说行不通:

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

是的,编辑了...意思是另一种类型,比如我创建的一个类或其他什么东西。 - Jjang
不行!只能使用相同的类型。 - andrea.marangoni
8个回答

9
您可以使用一个 std::pair
for (std::pair<int, char> p(0, 'j'); p.first < 10; p.first++)
{
}

8
简单的解决方案是在 for 外部创建一个范围:
{
    char Ch = 'j';

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

1
我很好奇为什么这个回答被踩了,因为它实际上是正确的答案。 - Matt

5
不可以直接这样做。你需要按照以下方式进行操作:
char Ch='J';
for(int i=0; i<10; i++)

问题在于,要声明不同类型的变量,需要使用分号(;)将两个语句分开——逗号(,)声明相同类型的变量。但是在for头中,分号有着不同的含义。
如果您关注作用域,也可以将其包含在一个代码块中。

4
答案是否定的,你只能在for循环中声明一种类型。但是,这种类型可以是一个结构体,所以有一个奇怪的方法可以规避这个限制:
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) { /* ...*/ }
   }
}

注意多余的括号 - 如果变量名与周围范围的变量名称冲突,可以使用它们来限制变量的作用域。

1

你可以声明另一个变量,但只能是相同类型的,以下代码可行:

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

但是Ch现在将成为一个int


1
是和否。 在 ; 之间,你可以像使用 , 一样做任何事情,所以以下是可能的:
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*'

0
您可以使用“,”来分隔。
for(int i=0,x=0; i<x; i++)
...

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

0

你不能重新声明其他变量的数据类型,可以尝试这样做:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接