在C++中,允许在for循环中具有空条件,例如在for (;;)或中for (int x = 0;; ++x).但你做不到while ().
当在for循环中省略条件时,假定条件为true(因此循环永远循环).为什么这不是while循环的情况,也就是说,背后的论点是什么,不让它while ()成为别名while (true)?
Sne*_*tel 30
据推测,这是一个副作用,即for语句中的每个给定子句都是可选的.这就是为什么一些for循环不需要赋值的原因; 这就是为什么有些人不需要条件的原因; 这就是为什么还有其他人不需要增量的原因.要求它们具有一些最小数量将是不必要的复杂性.
以下内容来自Deep C Secrets:
早期的C没有单独的&和&&或|运算符 和||.(得到了吗?)相反,它使用了"真值 - 值上下文"的概念(继承自B和BCPL):其中布尔值是预期的,在"if"和"while"等之后,&和| 运算符被解释为&&和|| 现在; 在普通表达式中,使用了按位解释.它运作得很好,但很难解释.(在真值环境中存在"顶级运营商"的概念.)
因此,while()如果()不能为空,早期语言的机制期望它们不是空的,那么你可以设置真值的上下文并且不能为空或暗示.
在C++中,你可以在for循环中有一个空条件......背后的论点是什么,不让它
while()成为别名while(true)?
首先,C++(以及C#和许多其他语言)是它们与C向后兼容的方式,所以让我们来谈谈C.
让我们做一些陈述并得出结论.
for循环允许您省略条件的原因很充分.while循环.while循环不允许被省略的状况; 它是不一致的.while循环与for循环不一致.而现在的问题是"那个不明显的理由是什么?"
但是,如果上述逻辑链是正确的,那么这个问题才有意义.在这些陈述中,只有#3实际上是真的!forC中的循环设计很差; 它是多余的,对新手来说很困惑,它的词汇约定与语言的其他部分不一致.它通过简单的while循环为语言提供几乎零的额外代表能力.
你的问题没有答案; 正确的反应是完全拒绝这个问题的前提.该for循环不仅是因为它是一个40多岁的不好的特性,我们大多数人一起长大,所以它的怪癖现在第二自然似乎是合理的; 这是熟悉,不是好设计.如果我们没有for循环而长大,我们就不会添加它.