为什么 for 循环的条件是可选的,而 while 循环不是?
Why is a for loop's condition optional, but a while loop's isn't?
为什么for(;;)
被视为无限循环,而while()
却给出错误,因为它需要一个表达式?为什么for
循环也不期望表达式?
它只是... 不会。
while
本可以允许空条件(大概会被解释为true
),但这样它就会与if
不对称,这对这不太有意义。
最终,没有令人信服的理由允许在while
序言中使用空条件,因为任何使用它的代码都不会是自我记录的。
对于与for
的对称性,您可能需要for(; true; )
- 除了现在这看起来很奇怪,因为声明和更新子句现在可能是空的,而条件不能。好吧,让我们也强制要求这些。那么,我们在那些地方放了什么来做无操作呢?for (int dummy = 0; true; (void)dummy)
?现在它变得越来越愚蠢。
它们是不同的语言功能,没有充分的理由让它们在这方面以相同的方式工作,而牺牲其他考虑因素。
免责声明:这个答案解释了为什么语法是有效的,而不是为什么它是这样设计的。
根据文档(强调我的):
正式语法:
attr(可选) for ( 初始化语句条件(可选) ;iteration_expression(可选)) 语句
所以所需要的只是init-statement
和;
.对于init-statement
,它说:
表达式语句(可以是空语句 ";">)
因此,如果您放弃可选内容并为 init 语句放置一个;
,则得到的只是;;
。
在 C 中,它有点不同:
为 ( init_clause ; cond_expression ; iteration_expression ) loop_statement
init_clause、cond_expression和iteration_expression都是可选的
这是两个;
和三个可选子句/表达式。如果省略所有三个,则会再次;;
。
这是一个语言设计问题,所以语言设计师应该插话。 我的观点:一种语言的可选功能(特别是快捷方式)应该 防止错误。 所以,while() 很容易是一个错误(你省略了条件,例如 0 或 1),而 for(;;) 很少是一个错误(你必须有意识地键入 2 ;)。
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 输入循环 while 函数
- c++中的循环(while)
- 为什么这段代码没有循环(while)