【问题标题】:Why is continue inside a loop a bad idea?为什么在循环内继续是一个坏主意?
【发布时间】:2011-06-22 06:55:11
【问题描述】:

Douglas Crockfod 说,通常最好在循环内重构 continue

为什么 continue 在循环中被认为是坏的?

【问题讨论】:

标签: loops continue


【解决方案1】:

使用continue 意味着您的while 中的条件不充分。

您应该在 while 循环中改用 if,或者将条件添加到 while 循环中。

【讨论】:

  • +1 是避免continue的(唯一理智的)理由(在大多数情况下,并非总是如此)。跨度>
  • -1 只是说“因为if 更好”根本无法回答问题。
【解决方案2】:

在循环体内使用 goto、break、continue、throw 或 return 也会产生不希望的效果。这是循环控制和循环主体紧密交织的另一个示例。它像以前一样写1、2和3吗?你确定吗?

int value = 1;
    for (;;++value)
    {
        cout << value << endl;
        if (value != 4)
            continue;
        else
            break;
    }

您可能会认为建议您不要在循环体内使用 return 语句过于热心了。我真的是这个意思吗?是的,我愿意。返回某些内容的函数应该通过函数末尾的单个 return 语句来执行此操作。以下是一些实际原因:

Link

免责声明:不是我的材料,我已经引用了源代码

【讨论】:

    【解决方案3】:

    continue 的效果在某种程度上与循环开头的goto 相当。因此,它会让你的代码更难理解——比如gotos。

    【讨论】:

    • -1 if (...) { ... } ... 在某种程度上与块末尾的 goto 相当。严肃地说,盲目地忽视任何与goto 的特殊案例类似的事情与严重滥用不合适的控制结构一样有害(例如,当存在针对手头问题的更高级别的控制结构时使用goto)。
    • @delnan 有条件的向下分支和无条件的向上分支之间有很大的区别。如果你读过复杂的汇编代码,你就会知道为什么。话虽如此,使用goto 实际上是可以接受的,但仅适用于无条件向下分支。与 continue 不同,它被设计破坏,因为它总是向上分支。 continue 的存在始终表明循环编写不佳,使用它的每个循环都可以以更好的方式重写。
    猜你喜欢
    • 2017-01-20
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    相关资源
    最近更新 更多