【问题标题】:for(;true;) different from while(true)?for(;true;) 与 while(true) 不同吗?
【发布时间】:2010-10-01 05:45:47
【问题描述】:

如果我的理解是正确的,他们会做同样的事情。为什么有人会使用“for”变体?只是味道吗?

编辑:我想我也在考虑 for (;;)。

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    是的,只是味道。

    【讨论】:

    • 我不明白为什么这被否决了。这不是一个很好的答案,但它正确地回答了这个问题。
    【解决方案2】:

    我从未见过for (;true;)。我已经见过for (;;),唯一的区别似乎是品味。我发现 C 程序员更喜欢 for (;;) 而不是 while (1),但这仍然只是偏好。

    【讨论】:

    • 嗯...也许 (;;) 是我的想法。
    • 我一直使用 while(1)。我和一个喜欢 do{...}while(1); 的人一起工作。因为他说你总是开始循环更清楚,但可能会在中途退出。他没有说服我。
    • 如果我总是需要运行一次,我总是会做一个 do..while 循环
    • while (true) does 清楚地表明您几乎运行了一次。 true 永远是 true :)
    【解决方案3】:

    以防他们计划稍后使用真正的 for() 循环。如果你看到 for(;true;),它可能是要调试的代码。

    【讨论】:

      【解决方案4】:

      一些编译器(警告一直向上)会抱怨while(true) 是一个永远不会失败的条件语句,而他们对for (;;) 很满意。

      出于这个原因,我更喜欢使用for (;;) 作为无限循环习语,但不要认为这有什么大不了的。

      【讨论】:

        【解决方案5】:
        for (;;)
        

        通常用于防止编译器警告:

        while(1)
        

        while(true)
        

        通常会引发关于条件表达式为常量的编译器警告(至少在最高警告级别)。

        【讨论】:

          【解决方案6】:

          不是答案,而是注释:有时记住 for(;x;) 与 while(x) 相同(换句话说,当我检查 if 条件的中心表达式时只说“while”)有助于我分析讨厌的陈述...
          例如,很明显,中心表达式总是在循环的第一遍开始时计算,您可能会忘记这一点,但是当您以 while() 格式查看它时,它是完全明确的。

          有时记住这一点也很方便

          a;
          while(b) {
             ...
             c;
          }
          

          几乎(见 cmets)和

          一样
          for(a;b;c) {
              ...
          }
          

          我知道这很明显,但积极了解这种关系确实有助于您在一种形式和另一种形式之间快速转换,以澄清令人困惑的代码。

          【讨论】:

          • 很好的解释。我认为一些 C++ 开发人员可能会惊讶于您的最后一个示例是等价的。
          • 它们完全相同:continue 语句会导致 'c' 在 'for' 变体中执行,而 'c' 不会在'while' 变体。
          • @adam 好点——我知道我忘记了一些微妙的东西,我实际上有点害怕它没有那么微妙:)
          • 另一个区别是您的 while 示例中的 c 可能引用主体的变量。它应该是 { a;而(b) { { ... } c; } }
          【解决方案7】:

          优化编译器应该为它们生成相同的程序集——一个无限循环。

          【讨论】:

            【解决方案8】:

            编译器警告已经讨论过了,所以我将从语义的角度来处理它。我使用 while(TRUE) 而不是 for(;;),因为在我看来,while(TRUE) 听起来比 for(;;) 更有意义。我将 while(TRUE) 读为“而 TRUE 始终为 TRUE”。就个人而言,这是对代码可读性的改进。

            因此,Zeus 禁止我不记录我的代码(当然,这种情况 - 永远不会发生)它比替代方案更具可读性。

            但是,总的来说,这是一件非常挑剔的事情,以至于 99% 的时间都归结为个人喜好。

            【讨论】:

              猜你喜欢
              • 2011-04-17
              • 2011-11-23
              • 2012-12-13
              • 2014-07-30
              • 1970-01-01
              • 2011-03-21
              • 2015-02-15
              • 1970-01-01
              • 2016-12-03
              相关资源
              最近更新 更多