我知道在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++)
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
头中,分号有着不同的含义。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++)
...
你不能重新声明其他变量的数据类型,可以尝试这样做:
for(int i = 0, j = 10; i < x; i++) {}