【问题标题】:What is the scope of a for loop without braces in C++C ++中没有大括号的for循环的范围是什么
【发布时间】:2018-12-25 22:40:31
【问题描述】:

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

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,因为没有 {...} 来引入新的范围。

【问题讨论】:

    标签: c++ scope curly-braces


    【解决方案1】:

    任何不带大括号的控制结构(ifforwhile 等)仅适用于下一条语句。第二个例子等价于:

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

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

    【讨论】:

    • 这与 {} 也有自己的范围(不一定在控制结构中)这一事实有关吗?
    • @AbrahamMurcianoBenzadon — 没有。请注意I 的定义not 在花括号内。规则本质上就是这个答案所说的:控制结构中定义的变量的范围在受控语句的末尾结束。受控语句可以是简单语句,也可以是用大括号括起来的复合语句。
    【解决方案2】:

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

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

    就相当于

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

    如果省略大括号,则正文只是for() 循环头之后的语句。

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 2014-05-07
      • 2017-10-28
      • 2014-12-05
      • 1970-01-01
      • 2019-03-09
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多