提问人:Luchian Grigore 提问时间:9/15/2011 最后编辑:iammilindLuchian Grigore 更新时间:9/16/2011 访问量:1363
for( ... ) 循环索引声明样式 [closed]
for( ... ) loop index declaration style [closed]
问:
在代码方面是否有任何区别:
int i = 0;
for ( i = 0 ; i < n ; i++ )
{
}
和
for ( int i = 0 ; i < n ; i++ )
{
}
也许如果有更多的循环并且它们都使用相同的索引?
此外,第一个版本是否等同于:
int i = 0;
for ( ; i < n ; i++ )
{
}
我知道优化器应该足够聪明,至少可以生成相同的代码,但理论上有什么区别吗?
答:
7赞
Aamir
9/15/2011
#1
在第一种和第三种情况下,的作用域超出了 for 循环。在第二种情况下,作用域与循环有关,如果以后想使用它,则必须重新声明。int i
for
i
是的,只有当你在前两行之间不放任何东西时,第一个版本才等同于第三个版本。如果你在两者之间添加一些代码,那么所有的赌注都是关闭的。
3赞
Benoit Thiery
9/15/2011
#2
“i”的范围不同。 在案例 1 中,您可以在循环外部访问它,而在案例 2 中,您只能在循环内访问它。在你离开循环后,它将不再存在。
2赞
iammilind
9/15/2011
#3
第 1 版和第 3 版几乎相同;在第 1 版中分配并在第 3 版中初始化的差异很小。(对于用户定义的数据类型,这有时会产生很大的不同)。i = 0
第二个版本在功能方面是相同的;但是,作用域在循环中。因此,一旦完成就无法访问。我更喜欢这个版本。i
for
i
{}
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.
上一个:可能的内存泄漏?
下一个:C++ 中的任务监视器和管理器
评论