【问题标题】:Is the code after 'break' executed? [closed]'break' 之后的代码是否被执行? [关闭]
【发布时间】:2013-08-08 16:29:45
【问题描述】:
for (...)
    for (...)
    {
        break;
        break;   // 1
    }

(1) 处的代码会执行吗?也可能有continue 或其他任何东西。 我知道我可以检查我的调试器,但我想知道 C++ 标准对此有何评论,因为我的编译器可能只是一个特例。

【问题讨论】:

  • 那你为什么不阅读文档呢?
  • 如果是,那将破坏关键字的目的。
  • “编译器不会做这种“特殊”的事情“——当然,他们会。各种编译器生产商将自己的扩展/改进添加到/超出语言标准。有时是因为他们认为它比标准提供的更好,有时是因为它对他们来说更容易。我假设。 ** 当然,差异并不大,但确实存在。
  • @JBL 我很确定我已经在其他一些语言(Java/C#/something)中看到了这个结构,其中特别允许双 break 并打破 2 个嵌套的 fors。
  • @NPS 奇怪,但在这种情况下,这似乎是编译器以自己的方式解释的东西,因为在这种情况下,语句的行为将不一致......在新白痴的回答,无论如何,C++ 的标准都非常清楚地表明,控制权会立即传递给刚刚退出的 break 范围之外的下一条语句。

标签: c++ break continue


【解决方案1】:

按照标准

在嵌套语句中,break 语句结束直接包含它的 do、for、switch 或 while 语句。

所以在你的情况下,它总是会在第一次中断并且永远不会出现第二次中断语句。

【讨论】:

    【解决方案2】:

    根据specifications

    6.6.1 中断语句 [stmt.break]

    break 语句只能出现在迭代语句或 switch 语句中并导致终止 最小的封闭迭代语句或 switch 语句;控制传递给语句 在终止的语句之后,如果有的话。

    因此 1 甚至不应该到达 .一些 Java 编译器甚至可能会标记该代码无法访问

    【讨论】:

    • 一些 C++ 编译器也可能将其标记为不可访问。
    【解决方案3】:

    没有。遇到中断时,代码执行会跳出内部第一个循环。
    就算代码是这样的

    break;
    continue;
    break;
    

    同样的事情也会发生。继续只是告诉编译器迭代循环进一步跳过其间的任何代码的一种方式。

    【讨论】:

      【解决方案4】:

      你可以看到here.

      而且我相信下一次休息永远不会超过。不管你使用什么编译器。

      【讨论】:

        【解决方案5】:

        不,每次遇到第一个 break 语句时,内部循环都会退出,并且永远不会到达第二个 break 语句。

        【讨论】:

          【解决方案6】:

          在该特定循环中,不,break 后不会执行任何代码,因为 break 将退出该循环并从内部 for 循环结束后继续执行。尽管在 break 之后(在外循环内)出现的内循环之外的任何代码都会被执行。

          【讨论】:

            【解决方案7】:

            (1)处的代码不会被执行,break表示跳出循环,所以第一次break后,代码会跳出内循环。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-25
              • 2011-04-11
              • 2013-09-11
              • 1970-01-01
              • 2019-10-27
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多