【发布时间】:2015-11-29 01:23:30
【问题描述】:
我在编码时遇到了这种奇怪的行为。所以我在这里问。
声明变量时for循环的范围是什么?
这段代码编译得很好
for (int i = 0; i < 10; i++) { }
for (int i = 0; i < 10; i++) { }
这意味着int i 不在同一范围内。
但是这段代码无法编译。
for (int i = 0; i < 10; i++) { }
int i; // Conflicts with both first loop and second one.
for (int i = 0; i < 10; i++) { }
这意味着循环中间的int i 与第一个循环和第二个循环的范围相同。
但是两个for 循环中的int i 怎么可能有不同的作用域,而中间的int i 的作用域相同呢?因为目前我看到他们处于同一水平。
我知道第二个代码无法编译。如果范围有问题,为什么要编译第一个代码。这是编译器内部的异常吗?
【问题讨论】:
-
不在同一个范围内,而是在一个嵌套的范围内,这也是被禁止的。看看这个问题以获得类似问题的答案:stackoverflow.com/questions/6156449/…
-
有趣的是,
for(int i = ...) {} {int i; } for(int i = ...) {}(注意内部{})确实符合要求。 -
@DmitryBychenko:这是因为 i 仅存在于大括号定义的块内(在 for 循环之间)。
-
外部
i是在第一个for循环之前还是之后都没有关系。编译器不想要它。观点。如果将声明从下到上移动,编译器错误可以防止您出现粗心的错误。这很容易避免。 -
由于没有答案表明:假设
This means the int i in middle of loops has the same scope of first loop and the second loop.是错误的,这是这里的主要问题。