2012-12-26 122 views
-1

所以我想知道我是否可以在for循环的声明中声明一个变量。此代码是否有效?For循环初始化

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

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

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

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

这是一个有效的说法吗?

+1

首先,你试过了吗?很明显,你没有其他方式可以得到答案。 – Caribou

+4

答案已经指定多变量初始值设定项是有效的,并且它们是正确的。但是,您应该知道,他们只是因为它们属于同一类型。 (即它们都是“int”)。你不能在for-initializer中分割不同类型的var-decl(你不这样做,所以这很好)。 – WhozCraig

+1

-1:显然没有研究。您的C++书籍涵盖了'for'循环的工作方式。另外你可以尝试一下。 –

回答

6

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

在声明的变量的范围换初始化语句for循环本身,所以它是不可用的for环路(§6.5.3/ 3)以外:

如果for-init-statement是一个声明,声明的名称范围扩展到的结尾,用于声明

1

for循环之外,它将无效,因为它的范围是for循环,是的。是的,这也是一个有效的声明。

Workingnot working

2

你可以在for循环中声明,这是这样做的普通方法。

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

Visual Studio(不知道其他编译器)可以设置标志以扩展for循环的范围。不要那样做。

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

1

都是有效的,但在这种情况下:

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

会更快一些

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

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

+6

任何像样的优化编译器都会为那些以完全相同速度运行的两个循环生成代码。针对可读性进行优化,而不是针对您认为编译器将对您的代码执行的操作。 –

+0

@GregHewgill:...假定编译器可以确定在循环体的执行过程中'len'没有被改变。 – 2012-12-26 23:47:49

+1

@VladLazarenko:的确,在大多数情况下,这是可能的(例如'len'是全球性的)。 –