关于重新定义的简单问题

The*_* do 1 c++ definition

为什么不允许这样做:

int a = 0;
int a = 0;
Run Code Online (Sandbox Code Playgroud)

但这是:

for (int i = 0; i < 2; ++i)
{
    int a = 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*eas 8

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

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

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

  • 记住:`i`和`a`之间的区别是范围:`i`'在'for`构造的整个生命周期中生活'(之后是不可见的),而`a`的生命周期仅限于一次执行循环体! (2认同)