【问题标题】:for (;;) is this an infinite loop? [duplicate]for (;;) 这是一个无限循环吗? [复制]
【发布时间】:2013-04-09 12:40:48
【问题描述】:

最近在阅读 c++ 教程时,我遇到了一个看起来像这样的 for 循环:

for (;;){
   //Do stuff
}

这是一个无限循环吗?我为什么要用这个而不是while(1)

【问题讨论】:

  • 是的。使用你更喜欢的那个。
  • for (;;) 显然是更好的风格。
  • @Kerrek SB:但它包含魔法吸血鬼犬。 (;;)
  • @jrok:我不知道...while (true) 暗示您正在检查某些情况,我觉得这是无缘无故的。我没有任何条件。我只想循环。我发现“while true”比for 循环更难阅读和推理,我可以轻松地将其理解为“forever”......如果有的话,for 循环需要更少的关键字,并且我想简单的问题应该有简单的解决方案。
  • @LeeMeador 我喜欢你在这个问题上的拖钓。正确,这些循环不是“无限的”。对于像你这样的人,我通常会说“不确定”。对于我们其他人来说,我们只是接受共同的意义并继续生活。 =)

标签: c++


【解决方案1】:

是的,它是无限的。传统上,编译器会在您使用while(1) 时生成警告,但在您使用for(;;) 时不会。不知道是不是还是这样。

【讨论】:

  • MSVC 仍然处于足够高的警告级别
【解决方案2】:

这是一个无限循环。更准确地说,如果for 中的条件为空,则将其视为true。至于while ( true )for (;;):从历史上看,for (;;) 是惯用形式(Kernighan 和 Ritchie 使用),部分原因可能是早期的 C 语言没有布尔值。在我工作过的任何地方,使用 while ( 1 ) 都不会通过代码审查。使用布尔值,while ( true ) 肯定比for (;;) 更直观,但while ( 1 ) 令人困惑。但是在前布尔时代,每个人都有一个#define 代表trueTRUE 或类似的东西,所以这是一个弱论点。最后,如果你是像我一样的老 C 程序员,最初是向 Kernighan 和 Ritchie 学习的,你只是本能地使用for (;;)。否则...这可能取决于您在哪里以及从谁那里学习 C++。

当然,在工作时,你会遵守家规,不管它们是什么。

【讨论】:

    【解决方案3】:

    这是一个无限循环吗?

    是的。

    我为什么要用这个而不是while(1)

    因为(糟糕的,IMO)口味。顺便说一句,如果我真的要创建一个无限循环,我会选择while (true)

    【讨论】:

    • @LeeMeador:真正的程序员不会使用goto ;)
    • +1 表示智慧。 -1 表示缺少幽默感。
    • @LeeMeador:有时在 SO 上很难发现讽刺;)
    • 愚蠢和讽刺都以“S”开头
    • @paddy, goto 和其他任何东西一样异常安全。我们不使用它的原因是因为它很快就会使程序无法维护。 (请注意,goto 使用不同的名称也是如此。就像循环中的 break 或函数末尾以外的返回。)
    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多