For循环初始化

时间:2012-12-26 23:30:15

标签: c++ visual-studio-2010 visual-c++ loops for-loop

所以我想知道我是否可以在for循环的声明中声明一个变量。这段代码有效吗?

for (int a = 0;a < len + 1;a++);

a存在于什么范围内?它会在for循环之外无效,还是我仍然可以访问它?

另外,我是否可以在单个for循环语句中声明或初始化2个变量?

for (int a = 0, b = len + 1;a < b;a++);

这是一个有效的陈述吗?

5 个答案:

答案 0 :(得分:6)

两者都完全有效,因为for语句的初始化部分(称为 for-init-statement )是表达式语句或一个简单声明。你的两个例子都是简单声明 - 第二个只有两个声明符。

for-init-statement 中声明的变量范围是for循环本身,因此在for循环之外不可用(第6.5.3节) / 3):

  

如果 for-init-statement 是声明,则声明的名称范围会扩展到 for-statement 的末尾。

答案 1 :(得分:2)

你可以在for循环中声明,这是正常的方法。

通常它的范围与for循环的{}一样长。

Visual Studio(不确定其他编译器)可以设置标志以将范围扩展到for循环之外。不要这样做。

您可以在for循环初始化中声明多个变量,只要它们属于同一类型。

答案 2 :(得分:1)

它在for循环之外是无效的,因为它的作用域是for循环,是的。是的,这也是一个有效的声明。

Workingnot working

答案 3 :(得分:1)

两者都有效,但在这种情况下:

for (int a = 0, b = len + 1;a < b;++a);

会更快

for (int a = 0;a < len + 1;++a);

因为len + 1是预先计算的。

答案 4 :(得分:-1)

for (int a = 0;a < len + 1;a++);

如果在此语句之前没有声明“int i”,这完全没问题。

不能在 for 循环外访问“a”。

for (int a = 0, b = len + 1;a < b;a++);

这也很好不过

for (int a = 0;int b = len + 1;a < b;a++);

for (int a = 0;double b = len + 1;a < b;a++);

以上两种说法都无效,因为您必须将“逗号”替换为“分号”和