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

时间:2011-09-15 09:46:10

标签: c++ coding-style syntax for-loop

代码之间是否存在任何差异:

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

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

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

此外,第一个版本是否相当于:

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

我知道优化器应该足够聪明,至少可以生成相同的代码,但理论上是否存在差异?

6 个答案:

答案 0 :(得分:7)

在第一和第三种情况下,int i的范围超出了for循环。在第二种情况下,范围是for循环,如果您想稍后使用它,则必须重新声明i

是的,只有在前两行之间没有放置任何东西时,第一个版本才相当于第三个版本。如果您在其间添加一些代码,则所有投注均已关闭。

答案 1 :(得分:3)

'i'的范围不同。 在情况1中,您可以在循环外访问它,而在情况2中,您只能在循环内访问它。离开循环后它将不再存在。

答案 2 :(得分:2)

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

第二版在功能上是相同的;但i循环中for 范围。因此i完成后无法访问{}。我更喜欢这个版本。

答案 3 :(得分:1)

好的,所以我想出了为什么我们在循环外使用索引声明。

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

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

错误是:

Error: multiple declaration for i.

答案 4 :(得分:0)

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

第二个功能相同,但仅限于{for循环中i的范围(使用范围)。

答案 5 :(得分:0)

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