2014-01-13 86 views
1

在更复杂的for loops,我用声明for内更是一个变量,如果它们被用于迭代初始化表达式内多种类型的变量,像:声明的for语句

for (int i = 0, j = size; i < j; ++i, --j) 

最多直到最近我还以为它是一个for语法,但是现在我知道int i = 0, j = size被看作是一个声明,并且++i, ++j被看作是由comma operator分隔的两个表达式。这意味着我可以在for的init-expression中只声明一种类型的变量。

如何申报更多类型的for statement变量里面,是这样的:

for (int i = 0, auto it = v.begin(); ..; ..) 

我知道我可以只申报for以外的变量。这些例子是我刚刚提出的,所以也许他们没有道理,但我遇到了一些真实的例子,我认为在for statement内声明更多变量似乎是逻辑。

+0

@ShafikYaghmour;仍然变量具有相同的类型,即'loopy'。 – haccks

+2

你的声明语句中的逗号并没有做你认为的事情,当然也不是它在增量声明中做的事情。前者分隔相同类型的ID。把它看作和for循环上下文*外*一样无效:'int a = 0,long x = 1;' – WhozCraig

+0

@WhozCraig我知道,我甚至在自己的问题中说过。我想知道是否有办法声明不同类型的变量。 – bolov

回答

3

你不能。一个简单的规则是,for循环可以声明多个变量,前提是所有变量都具有相同的类型

+0

这很伤心。 [评论填充] – bolov

+0

这就是所谓的语言限制:) – haccks

+0

@haccks这是一个C标准的参考?如果是,请提供该部分。 –

-1

你其实可以。请看下面的例子:

for(int i=0,j=1;i<=5,j<=5;i++,j++) 

为i和j是通过逗号在条件语句中分离出来,如j递增比我后者,一旦为J满足其条件,即达到于计5,此循环将终止。因此,你需要注意第二个变量的条件。

+2

OP知道他们可以在for循环中声明2个相同类型的变量。他们的问题是关于声明不同类型的2个变量,正如@ hackks所说,这是不可能的。 –

+0

我<= 5没有效果。 – bolov