【问题标题】:What is the feature to use for( ;; )? [duplicate]for( ;; ) 的功能是什么? [复制]
【发布时间】:2013-01-02 04:51:16
【问题描述】:

可能重复:
Is “for(;;)” faster than “while (TRUE)”? If not, why do people use it?

找到了这个 for 循环的代码。 例如,使用 while(true) 的具体功能是什么?是不是内存少了?

【问题讨论】:

  • for (;;) 只是一个空循环,它为比 while 更复杂的条件保留了一些空间。否则,收益不大。
  • while(true) 相比,for(;;) 在您的硬盘驱动器上使用的内存减少了 4 字节。
  • @FredOverflow:更重要的是一些编译器(曾经?)警告while(true)(“条件中的常量表达式”),但我没有遇到任何警告for(;;)
  • @FredOverflow:可读性是旁观者的眼中。 :)
  • @sbi 对,你可以#define ever (;;) 然后for ever 是最易读的;)

标签: c++ syntax


【解决方案1】:

for(;;) 在功能上等同于while(true),但在某些编译器(包括 MSVC 的 cl)中避免了“条件表达式是常量”警告

【讨论】:

  • nmake 肯定不是编译器吧?
  • @DanielRoethlisberger 澄清为cl
  • 编译器名为MSVCcl.exe 只是其中一种命令行工具(例如,还有link.exe)。所以,“包括 MSVC”应该可以。
【解决方案2】:

Kernighan 和 Ritchie 在他们的C 编程语言一书(第 3.5 节)中推广了这个结构

for 语句

for (expr1; expr2; expr3)
    statement

如果 expr1 或 expr3 被省略,它只是从扩展中删除。如果测试 expr2 不存在,则将其视为永久正确,因此

for (;;) {
    ...
}

是一个“无限”循环,可能会被其他方式打破,例如breakreturn

for(;;)while(true) 之间绝对没有区别。

【讨论】:

    【解决方案3】:
    while(true)
    {
    
    }
    

    始终是我使用过的以及我看到其他人使用的用于必须手动中断的循环。

    一些编译器会警告你这个 while loom 可能不正确。但事实并非如此。

    为两者生成的汇编代码完全相同。没有区别。

    【讨论】:

      【解决方案4】:

      第一,循环的使用取决于需求&基于此,我们只能决定何时使用哪一个。看看@Luchian问了什么,你就知道了。

      其次,这显然取决于特定语言的解释器/编译器的特定实现。

      也就是说,从理论上讲,如果速度更快,任何理智的实现都可能能够根据另一个实现一个,因此差异最多可以忽略不计。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多