我可以在for循环的初始化中声明不同类型的变量吗?

时间:2011-12-27 12:37:53

标签: c++ for-loop scope initializer variable-declaration

为什么这个C ++代码不能在VS2010下编译:

for ( int a = 0, short b = 0; a < 10; ++a, ++b ) {}

虽然这个:

short b = 0;
for ( int a = 0; a < 10; ++a, ++b ) {}

是否禁止在for-loop初始化程序中声明两个不同类型的变量?如果是这样,你怎么解决它?

5 个答案:

答案 0 :(得分:42)

是的,这是禁止的。同样,你不能在一个声明语句中声明不同类型的变量(编辑:模块化@MrLister提到的声明符修饰符)。你可以声明结构

for (struct { int a = 0; short b = 0; } d; d.a < 10; ++d.a, ++d.b ) {}

C ++ 03代码:

for (struct { int a; short b; } d = { 0, 0 }; d.a < 10; ++d.a, ++d.b ) {}

当然,如果全部都是0,您可以完全省略初始值设定项并写入= { }

答案 1 :(得分:10)

for循环无关。如果你在任何循环之外写int a = 0, short b = 0;,这也不会编译 所以答案是:总是禁止在一个语句中声明两个不同类型的变量。

编辑:哦,对于迂腐,我确实知道你可以在同一个语句中声明一个基类型和一个指针类型,例如一个int和一个int指针,所以那些将是不同的类型,是的。 /> 嗯,这让我觉得。在32位环境中,指针将是4个字节,就像int一样,所以你可以使用short a = 0,* b = 0;然后将b转换为int。唔...

答案 2 :(得分:1)

int a = 0, short ...

中的逗号一样,禁止使用逗号结束语句

如果你想使用这种表示法,那么变量muss具有相同的类型int i = 0, s = 0;

答案 3 :(得分:0)

您只能在for语句中声明一种类型。所以第二个代码是可用的代码。

答案 4 :(得分:0)

您无法将变量声明为while的{​​{1}}条件(复杂步骤)。

for

这既不起作用。