【问题标题】:Can you place a complex condition into a for loop?你能把一个复杂的条件放到一个for循环中吗?
【发布时间】:2009-12-29 12:03:06
【问题描述】:
while (status)

for (int i = 0; i < 3; i++)

以下句法是否正确:

for (int i = 0; i < 3; i++ && status)

如果状态为真,我试图让 for 循环提前中断。

【问题讨论】:

  • 您的意思是“如果 statis 为假,请提前休息”,对吧?那将是for (int i=0; i&lt;3 &amp;&amp; status; ++i)

标签: c++ for-loop


【解决方案1】:

从句法上讲,您可能想使用:

for (int i = 0; i < 3 && status; i++)

这是有效的。

不过,有些人认为它是一种糟糕的形式,因为它会导致更复杂的循环并让维护程序员烦恼。您可能想要探索的另一种选择是:

for (int i = 0; i < 3; i++) {
     if (!status) { break; }
}

【讨论】:

  • 那么什么才是好的形式呢?改用 while 循环?
  • 我添加了一个使用 break 的示例,这是(有争议的)更好的形式。如果你手边有一份 Code Complete 的副本,那么有一整章是关于控制结构的可读性的,所以这还不是讨论的结束。
  • 我投票赞成这一点,因为期待所有“从不使用-break-in-loops”的人群(我不同意)很快就会斥责你。我就是忍不住用棍子戳人:-)
  • pax 和 MAK 正准备与一些“人群”进行一些“战斗”,并且完全错过了如果从 for 条件转移到 if 语句,它需要是 !status。也许这会损害可维护性的想法。
  • 是的,只要最后有一个笑脸,谁在乎我们说什么或做什么。直到有人失去一只眼睛,这都是有趣的'n'游戏。 .-)
【解决方案2】:

“如果状态为真,我试图让 for 循环提前中断。” 执行此操作的首选方法是在 for 循环体中使用 if 语句。

for (int i = 0; i

【讨论】:

    【解决方案3】:

    我怀疑以下在语法上是正确的:

    for (int i = 0; i < 3; i++ && status)
    

    但它可能不是你的意思。正如Adam 所指出的,您可能想要:

    for (int i = 0; i < 3 && status; ++i)
    

    这有你想要的所有含义,循环条件的所有细节都在for 语句中。

    另一种形式:

    for (int i = 0; i < 3; i++) {
         if (!status) { break; }
    }
    

    如果您想在if 之前或之后添加一些代码,这很有用,但维护程序员看不到 if。

    注意:for 语句中使用status,如果状态为假,循环可能永远不会运行。

    【讨论】:

      【解决方案4】:

      语法正确是的。但意义不同。 第一段代码,在 status 等于 1 时运行你的 for 循环。第二段代码,只运行 for 循环 10 次然后退出。

      【讨论】:

        【解决方案5】:

        您应该只使用“break”,而不是将 status 设置为 true。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-09-03
          • 1970-01-01
          • 2018-08-19
          • 2018-01-13
          • 2021-03-28
          • 2011-11-05
          • 1970-01-01
          相关资源
          最近更新 更多