下面的代码在运行时会产生错误,但是如果我在循环外面声明至少一个变量,代码就可以正常工作。为什么我不能在循环中声明这两个变量呢?
错误:
#include<iostream>
#include<conio.h>
using namespace std ;
int main()
{
for(int j=0,int i=0;i<4&&j<2;i++,j++)
{
cout<<"Hello"<<endl ;
}
getch() ;
return 0 ;
}
工作正常:
#include<iostream>
#include<conio.h>
using namespace std ;
int main()
{
int i ;
for(int j=0,i=0;i<4&&j<2;i++,j++)
{
cout<<"Hello"<<endl ;
}
getch() ;
return 0 ;
}
答案 0 :(得分:8)
你可以,但在单个声明中声明两个变量的符号是这样的:
int j=0, i=0;
没有第二个int
。
(这实际上是你的第二个版本正在做的事情;你可能认为它正在分配已经声明的i
,但实际上它正在声明一个新的,其范围是for
- 循环。)
答案 1 :(得分:5)
因为这就是标准定义语法的方式。这个想法没有什么“错误”,但显然你决定在初始化部分只能有一个声明。
如果要声明多个变量,请使用逗号枚举它们(但这样,您只能声明相同类型的变量):
for (int i = 0, j = 10; i < 10; i++, j--)
但是,我不确定你应该这样做。在某一点之后,这演变成一个难以理解的混乱。
答案 2 :(得分:0)
请注意,给定的答案“仅”处理多个相同类型的变量。
如果由于某些奇怪的原因,你需要做多种类型,这是有效的(尽管很糟糕):
for(struct {int a; double b} loop = {0, 1.5}; loop.a < loop.b; loop.a++)
{
// Awful hacks
}