24

为什么这段 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 循环初始化程序中声明两个不同类型的变量?如果是这样,你怎么能解决它?

4

5 回答 5

43

是的,这是被禁止的。就像您不能在一个声明语句中声明不同类型的变量一样(编辑:以@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,您可以完全省略初始化程序并编写= { }

于 2011-12-27T12:41:22.600 回答
10

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

编辑:哦,对于迂腐的人,我确实意识到您可以在同一个语句中声明一个基类型和一个指针类型,例如一个 int 和一个 int 指针,所以它们是不同的类型,是的。
嗯,这让我想。在 32 位环境中,指针将是 4 个字节,就像 int 一样,因此您可以使用 short a = 0, *b = 0; 然后将 b 转换为 int。嗯……

于 2011-12-27T12:42:57.220 回答
1

禁止使用逗号结尾的语句,就像您在int a = 0, short ...

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

于 2011-12-27T12:51:57.367 回答
0

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

于 2011-12-27T12:41:48.903 回答
0

您不能将变量声明为(审查步骤)的while条件。for

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

那都行不通。

于 2011-12-27T12:42:42.447 回答