代码之间是否存在任何差异:
int i = 0;
for ( i = 0 ; i < n ; i++ )
{
}
和
for ( int i = 0 ; i < n ; i++ )
{
}
也许如果有更多循环并且它们都使用相同的索引?
此外,第一个版本是否相当于:
int i = 0;
for ( ; i < n ; i++ )
{
}
我知道优化器应该足够聪明,至少可以生成相同的代码,但理论上是否存在差异?
答案 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)
第一个版本和第三个版本是相同的 第二个版本与另一个版本有所不同:我只生活在循环范围内。