在编码过程中,我遇到了这个奇怪的行为。所以我在这里提问。
当声明变量时,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
具有相同的作用域呢?因为我当前看到它们处于相同的级别。
我知道第二段代码无法编译。如果作用域存在问题,为什么第一段代码能够编译?这是编译器内部的一个特例吗?
for(int i = ...) {} {int i; } for(int i = ...) {}
(注意内部的{}
)确实可以编译。 - Dmitry Bychenkoi
在第一个for
循环之前还是之后都没有关系。编译器不允许这样做。编译器错误可以防止您在将声明从底部移动到顶部时犯粗心错误。这很容易避免。 - Tim Schmelter