为什么for循环的条件是可选的,而while循环的条件不是可选的?

时间:2019-01-04 13:45:17

标签: c++ c

为什么for(;;)被视为无限循环,而while()却由于需要表达式而产生错误?为什么for循环也不要期望表达式?

3 个答案:

答案 0 :(得分:10)

只是……不。

while可以允许一个空条件(大概被解释为true),但是它与if不对称,因此意义不大

最终,没有令人信服的理由允许在while序言中使用空条件,因为任何使用此条件的代码都不会自行记录。

对于与for对称的情况,可以要求for(; true; ) —除非现在看起来很奇怪,因为声明和更新子句现在可能为空而条件不能为空。好的,我们也将其设为强制性。那么,我们要把那些地方放到什么地方去? for (int dummy = 0; true; (void)dummy)?现在越来越傻了。

它们具有不同的语言功能,没有充分的理由使它们在这方面以相同的方式工作,而以其他考虑为代价。

答案 1 :(得分:1)

免责声明:此答案说明了为什么语法有效,而不是为什么这样设计。

根据documentation(强调我的意思):

  

形式语法:

     

attr(可选),用于(初始化语句条件(可选);迭代表达式(可选))语句

因此,只需要init-statement;。对于init-statement,它说:

  

一个表达式语句(可以是空语句“;”

因此,如果您放弃了可选的内容并在初始化语句中放置了;,那么您得到的仅仅是;;

C中,这有点不同:

  

for(init_clause; cond_expression;迭代表达式)   loop_statement

     

init_clause,cond_expression和eration_expression都是可选的

这是两个;和三个可选的子句/表达式。如果省略全部三个,则再次得到;;

答案 2 :(得分:0)

这是一个语言设计问题,因此语言设计人员应注意。 我的意见:语言的可选功能(特别是快捷方式)应 预防错误。 因此,while()很容易出错(您省略了条件,例如0或1),而 for(;;)很少会犯错误(您必须有意识地键入2;)。