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



为什么这个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循环初始化器中声明两个不同类型的变量吗?如果是这样,你该如何解决这个问题?

是的,这是被禁止的。就像你不能在一个声明语句中声明不同类型的变量一样(edit:对@MrLister提到的声明器修饰符取模)。你可以声明structs

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时,您可以完全省略初始化项而写成= { }

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

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

禁止像int a = 0, short ...

那样以逗号结束语句。

如果你想使用这种符号,那么两个变量必须具有相同的类型int i = 0, s = 0;

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

不能将变量声明为forwhile条件(同步步骤)。

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

都不行

最新更新