while循环需要显式条件,for循环没有,为什么?

Luk*_*kec 22 c++ syntax loops

在C++中,允许在for循环中具有空条件,例如在for (;;)或中for (int x = 0;; ++x).但你做不到while ().

当在for循环中省略条件时,假定条件为true(因此循环永远循环).为什么这不是while循环的情况,也就是说,背后的论点是什么,不让它while ()成为别名while (true)

Sne*_*tel 30

据推测,这是一个副作用,即for语句中的每个给定子句都是可选的.这就是为什么一些for循环不需要赋值的原因; 这就是为什么有些人不需要条件的原因; 这就是为什么还有其他人不需要增量的原因.要求它们具有一些最小数量将是不必要的复杂性.


Nik*_*iou 8

以下内容来自Deep C Secrets:

早期的C没有单独的&和&&或|运算符 和||.(得到了吗?)相反,它使用了"真值 - 值上下文"的概念(继承自B和BCPL):其中布尔值是预期的,在"if"和"while"等之后,&和| 运算符被解释为&&和|| 现在; 在普通表达式中,使用了按位解释.它运作得很好,但很难解释.(在真值环境中存在"顶级运营商"的概念.)

因此,while()如果()不能为空,早期语言的机制期望它们不是空的,那么你可以设置真值的上下文并且不能为空或暗示.

  • 我不明白.如果表达式是*optional*,运算符的含义和"context"与问题有什么关系? (3认同)
  • 仍然不明白为什么这是一个争论.他们可以说**如果**括号内有东西,它是一个布尔表达式上下文.另外,为什么`for`循环的计数不一样? (3认同)

Eri*_*ert 8

在C++中,你可以在for循环中有一个空条件......背后的论点是什么,不让它while()成为别名while(true)

首先,C++(以及C#和许多其他语言)是它们与C向后兼容的方式,所以让我们来谈谈C.

让我们做一些陈述并得出结论.

  1. for循环允许您省略条件的原因很充分.
  2. 同样的理由适用于while循环.
  3. while循环不允许被省略的状况; 它是不一致的.
  4. 跨语句的设计选择的一致性是C的设计中的重要因素.
  5. 因此,必然存在不明确的原因; 必须有一个很好的理由说明while循环与for循环不一致.

而现在的问题是"那个不明显的理由是什么?"

但是,如果上述逻辑链是正确的,那么这个问题才有意义.在这些陈述中,只有#3实际上是真的!forC中的循环设计很差; 它是多余的,对新手来说很困惑,它的词汇约定与语言的其他部分不一致.它通过简单的while循环为语言提供几乎零的额外代表能力.

你的问题没有答案; 正确的反应是完全拒绝这个问题的前提.for循环不仅是因为它是一个40多岁的不好的特性,我们大多数人一起长大,所以它的怪癖现在第二自然似乎是合理的; 这是熟悉,不是好设计.如果我们没有for循环而长大,我们就不会添加它.