4

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

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

有没有办法在for中声明另一个变量?这对我不起作用:

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

8 回答 8

9

您可以使用std::pair

for (std::pair<int, char> p(0, 'j'); p.first < 10; p.first++)
{
}
于 2012-04-03T12:01:37.770 回答
8

简单的解决方案是在以下范围内创建一个范围for

{
    char Ch = 'j';

    for (int i = 0; i < 10; i++)
    {
    }
}
于 2012-04-03T12:00:04.997 回答
5

你不能。你可以这样做:

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

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

如果您担心范围,也可以将其包含在一个块中。

于 2012-04-03T11:59:47.213 回答
4

答案是否定的,你只能在一个 foo 循环中声明一种类型。但是,类型可以是结构,所以围绕限制有一个奇怪的 hack:

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) { /* ...*/ }
   }
}

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

于 2012-04-03T12:25:27.797 回答
1

您可以声明另一个变量,但只能是相同类型,以下工作:

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

Ch现在将是一个int.

于 2012-04-03T11:59:40.440 回答
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*'
于 2012-04-03T12:06:49.097 回答
0

您可以使用“,”。

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

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

于 2012-04-03T11:59:26.527 回答
0

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

   for(int i = 0, j = 10; i < x; i++) {}
于 2012-04-03T11:59:53.950 回答