for( ... ) 循环索引声明样式 [closed]

for( ... ) loop index declaration style [closed]

提问人:Luchian Grigore 提问时间:9/15/2011 最后编辑:iammilindLuchian Grigore 更新时间:9/16/2011 访问量:1363

问:

在代码方面是否有任何区别:

int i = 0;
for ( i = 0 ; i < n ; i++ )
{
}

for ( int i = 0 ; i < n ; i++ )
{
}

也许如果有更多的循环并且它们都使用相同的索引?

此外,第一个版本是否等同于:

int i = 0;
for ( ; i < n ; i++ )
{
}

我知道优化器应该足够聪明,至少可以生成相同的代码,但理论上有什么区别吗?

C++ 编码样式 语法 for-loop

评论


答:

7赞 Aamir 9/15/2011 #1

在第一种和第三种情况下,的作用域超出了 for 循环。在第二种情况下,作用域与循环有关,如果以后想使用它,则必须重新声明。int ifori

是的,只有当你在前两行之间不放任何东西时,第一个版本才等同于第三个版本。如果你在两者之间添加一些代码,那么所有的赌注都是关闭的。

3赞 Benoit Thiery 9/15/2011 #2

“i”的范围不同。 在案例 1 中,您可以在循环外部访问它,而在案例 2 中,您只能在循环内访问它。在你离开循环后,它将不再存在。

2赞 iammilind 9/15/2011 #3

第 1 版和第 3 版几乎相同;在第 1 版中分配并在第 3 版中初始化的差异很小。(对于用户定义的数据类型,这有时会产生很大的不同)。i = 0

第二个版本在功能方面是相同的;但是,作用域在循环中。因此,一旦完成就无法访问。我更喜欢这个版本。ifori{}

0赞 Saket 9/15/2011 #4

第一和第三在所有方面都是一样的。

第二个在功能上是相同的,但限制了 for 循环中的范围(使用)。i

0赞 Roee Gavirel 9/15/2011 #5

第一个版本和第三个版本是相同的。
第二个版本与另一个版本有一个区别:我只生活在循环范围内。

1赞 Luchian Grigore 9/16/2011 #6

好的,所以我弄清楚了为什么我们在循环之外使用索引声明。

显然,我们的solaris编译器会为以下代码提供编译错误:

for ( int i = 0 ; ; );
for ( int i = 0 ; ; );

错误是:

Error: multiple declaration for i.