可能重复:
In C++ why can't I write a for() loop like this: for( int i = 1, double i2 = 0;
Why is it so 'hard' to write a for-loop in C++ with 2 loop variables?
#include <iostream>
using namespace std;
int main()
{
for (int i = 0, double j = 3.0; i < 10; i++, j+=0.1)
cout << i << j << endl;
return 0;
}
不编译,因为for循环初始化程序块中有两个声明。
但为什么?
答案 0 :(得分:43)
如果你想在初始化中同时使用int
和double
,那么一种方法是定义一个匿名结构!是的,您可以在struct
循环中定义for
。它似乎是C ++的鲜为人知的特性:
#include <iostream>
int main()
{
for( struct {int i; double j;} v = {0, 3.0}; v.i < 10; v.i++, v.j+=0.1)
std::cout << v.i << "," << v.j << std::endl;
}
输出:
0,3
1,3.1
2,3.2
3,3.3
4,3.4
5,3.5
6,3.6
7,3.7
8,3.8
9,3.9
答案 1 :(得分:17)
在C ++语法中,使用;
(如果不是函数)分隔不同的数据类型。在for
循环中,一旦找到;
,其含义就会改变。即。
for (<initializations>; <condition>; <next operation>)
其他原因可能是为了避免复杂语法的复杂性,不允许使用此功能。
如果你想在for
循环范围内声明变量,那么你总是可以模拟这种情况:
int main()
{
{
double j = 3.0;
for (int i = 0; i < 10; i++, j+=0.1)
cout << i << j << endl;
}
return 0;
}
答案 2 :(得分:10)
因为已经采用了语法。在变量声明/定义中,用逗号分隔会添加相同类型的新变量,而不是不同类型的变量。该语法在for
循环中可用:
for ( std::vector<int>::const_iterator it = v.begin(), end = v.end();
it != end; ++it ) {
// do something here
}