关于重新定义的简单问题

时间:2010-04-26 10:09:30

标签: c++ definition

为什么不允许这样做:

int a = 0;
int a = 0;

但这是:

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

据我所知,for循环中的代码将执行两次实际超出其范围,因此定义两次也应该是错误。
期待你的答案 感谢。

3 个答案:

答案 0 :(得分:8)

for循环中有一个定义。变量在结束大括号中被创建,使用,然后被销毁,并在下一个循环迭代中重新创建。定义了一个变量。

这在某种程度上类似于函数中定义的变量。该函数可以多次调用,但变量是一。事实上,对于函数,函数可以递归调用,并且将有多个变量存活,但是对于函数的每次执行,都定义了一个变量。

编辑:注意,正如@xtofl正确指出的那样,i的生命周期是整个for循环,而a的生命周期是花括号中的块:单次迭代for循环。

答案 1 :(得分:3)

代码执行两次 但编译器只会读取'a'变量的定义一次。

答案 2 :(得分:2)

在第二种情况下,变量a仅在for循环中作用域。您无法从外部访问它。它将再次为循环的每次迭代创建 - 就像你为每次迭代得到一个新的a。例如,无法在一次交互中为a分配值,并在以后的任何迭代中访问此赋值。

您应该阅读variable scopes以获取有关此主题的更多信息。因为它在编程中非常重要。