它只是一个永远不会自行结束的循环,称为无限循环.(通常,这是一件坏事.)
当它为空时,它可以无限期地停止程序*; 否则循环中通常有一些条件,当为true时,会打破循环:
while (true)
{
// ...
if (stopLoop)
break;
// ...
}
Run Code Online (Sandbox Code Playgroud)
这通常比辅助标志更清洁:
bool run = true;
while (run)
{
// ...
if (stopLoop)
{
run = false;
continue; // jump to top
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
另请注意for (;;),由于各种原因,有些人会建议.(也就是说,它可能会消除类似于"条件表达总是如此"的警告.)
*在大多数语言中.
这是一个无限循环。在每次迭代中,将评估条件。由于条件是true,因此始终……为真……循环将永远运行。退出循环是通过检查循环中的某些内容来完成的,然后在必要时中断。
通过将中断检查放置在循环中,而不是将其用作条件,可以更清楚地表明您希望此检查在某个事件发生之前一直运行。
在游戏中经常使用这种方式。您要继续处理动作并渲染帧,直到游戏退出。
而不是填写while声明中的所有可能条件,
// Always tests all conditions in loop header:
while( (condition1 && condition2) || condition3 || conditionN_etc ) {
// logic...
if (notable_condition)
continue; // skip remainder, go direct to evaluation portion of loop
// more logic
// maybe more notable conditions use keyword: continue
}
Run Code Online (Sandbox Code Playgroud)
一些程序员可能认为最好将条件放在逻辑上(即不仅仅是在循环头内)并使用break语句在适当的位置出来.这种方法通常会否定原始条件以确定何时离开循环(即代替何时保持循环).
// Always tests all conditions in body of loop logic:
while(true) {
//logic...
if (!condition1 || !condition2)
break; // Break out for good.
// more logic...
if (!condition3)
break;
// even more logic ...
}
Run Code Online (Sandbox Code Playgroud)
在现实生活中,它通常是一种更灰色的混合物,是所有这些东西的组合,而不是以某种方式走向两极分化.
用法将取决于逻辑的复杂性和程序员的偏好..也许取决于这个线程的接受答案:)
另外不要忘了do.. while.最终的解决方案可以使用该版本的while构造来根据自己的喜好扭曲条件逻辑.
do {
//logic with possible conditional tests and break or continue
} while (true); /* or many conditional tests */
Run Code Online (Sandbox Code Playgroud)
总而言之,拥有程序员选项是件好事.所以不要忘记感谢您的编译器作者.
| 归档时间: |
|
| 查看次数: |
7056 次 |
| 最近记录: |