使用哪个无限循环
可能重复:
“for(;;)”比“while(TRUE)”快吗? 如果没有,为什么人们会使用它?
我一直在阅读作者for(;;)
而不是while(true)
的编程书(java while(true)
。 这件事真的开始让我烦恼所以我认为我应该检查哪个是最好用的,如果有任何差异。 以下是可能的无限循环:
for(;;){ } while(true){ } do{ }while(true)
- 哪个更喜欢使用?
- 在表现中是否有任何差异(比如你必须测试在情况下是否为真)或者它们是否编译成同一个东西?
它们被编译成同样的东西,仅仅是一种风格问题。 较老的程序员可能认识for(;;)
,但我可能只是使用while(true)
。
是的,这只是一种风格问题,我更喜欢while(true)
因为意图很明确。 for(;;)
只是对我没有说什么。
它们在性能方面应该是相同的,但即使它们不是这样,速度与可读性无关。 最好的方法是任何看到代码的人都会被最快地认为是无限循环的方法。 我倾向于while (true)
因为它是最基本的情况,但这取决于谁在查看代码。
如有疑问,请测量。
如果不出意外,请编写所有三个版本的代码,并查看每个版本生成的程序集。 除非编译器非常愚蠢,否则我会打赌真钱,它会为所有三个生成完全相同的代码。
编辑
FWIW,gcc为这三个代码生成相同的代码(至少在我写的死的简单案例中)。 while(true)
在编译时是可计算的; 没有必要执行测试,只需将跳转硬编码回循环的开头即可。