为什么不允许这样做:
int a = 0;
int a = 0;
但这是:
for (int i = 0; i < 2; ++i)
{
int a = 0;
}
据我所知,for循环中的代码将执行两次实际超出其范围,因此定义两次也应该是错误。
期待你的答案
感谢。
答案 0 :(得分:8)
for循环中有一个定义。变量在结束大括号中被创建,使用,然后被销毁,并在下一个循环迭代中重新创建。定义了一个变量。
这在某种程度上类似于函数中定义的变量。该函数可以多次调用,但变量是一。事实上,对于函数,函数可以递归调用,并且将有多个变量存活,但是对于函数的每次执行,都定义了一个变量。
编辑:注意,正如@xtofl正确指出的那样,i
的生命周期是整个for循环,而a
的生命周期是花括号中的块:单次迭代for循环。
答案 1 :(得分:3)
代码执行两次 但编译器只会读取'a'变量的定义一次。
答案 2 :(得分:2)
在第二种情况下,变量a
仅在for循环中作用域。您无法从外部访问它。它将再次为循环的每次迭代创建 - 就像你为每次迭代得到一个新的a
。例如,无法在一次交互中为a
分配值,并在以后的任何迭代中访问此赋值。
您应该阅读variable scopes以获取有关此主题的更多信息。因为它在编程中非常重要。