在C++中没有大括号的for循环的范围是什么

Abr*_*don -5 c++ scope curly-braces

据我所知,{...}引入了一个新的范围,这就是为什么以下方法不起作用:

for(int i = 0; i < 10; i++) {
    // Do something...
}

cout << i << endl;  // Error: i is not defined in this scope
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试没有大括号的同样的事情时,我得到了同样的错误.

for (int i = 0; i < 10; i++) continue;
cout << i << endl;  // Same error, not sure why
Run Code Online (Sandbox Code Playgroud)

我希望i在第二个例子中定义,因为没有{...}引入新的范围.

Dan*_*l H 6

任何控制结构(if,for,while等),而不适用于大括号只对下一个语句.第二个例子相当于以下内容:

for (int i = 0; i < 10; i++) {
    continue;
}
cout << i << endl;
Run Code Online (Sandbox Code Playgroud)

请注意,拥有没有大括号的控制结构通常被认为是不好的风格,因为如果添加另一条线,人们可能会忘记添加大括号,并且可能导致悬空的其他问题.

  • @AbrahamMurcianoBenzadon - 没有.请注意,在大括号内,"I"的定义不是**.该规则基本上就是这个答案所说的:控制结构中定义的变量的范围在受控语句的末尾结束.受控语句可以是简单语句,也可以是用大括号括起来的复合语句. (2认同)