为什么这个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初始化程序中声明两个不同类型的变量?如果是这样,你怎么解决它?
答案 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
这既不起作用。