在C ++中不带括号的for循环的范围是什么

时间:2018-12-25 22:40:32

标签: c++ scope curly-braces

我知道{...}引入了一个新的作用域,这就是为什么以下内容不起作用的原因:

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

cout << i << endl;  // Error: i is not defined in this scope

但是,当我尝试不使用大括号的相同东西时,我会遇到相同的错误。

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

我希望在第二个示例中定义i,因为没有{...}会引入新的作用域。

2 个答案:

答案 0 :(得分:6)

任何不带花括号的控制结构(INiffor等)仅适用于下一条语句。第二个示例等效于以下内容:

while

请注意,具有不带括号的控件结构通常被认为是不好的样式,因为人们在添加另一行时会忘记添加括号,这可能会导致dangling else问题。

答案 1 :(得分:4)

i可见性的范围是for()循环主体。

for (int i = 0; i < 10; i++) continue;

等同于

for (int i = 0; i < 10; i++) { continue; }

如果省略括号,则主体只是for()循环标题后面的语句。