无限while循环和for循环之间有什么区别?

时间:2010-08-21 01:07:12

标签: c++ loops for-loop while-loop

我看到了我读过的很多书中使用的不同约定,你可以用这种循环结构创建无限循环,例如:

while()
   foo();
for(;;)
   foo();

但实际上,我应该知道的不同之处是什么?哪个更好?

6 个答案:

答案 0 :(得分:7)

他们在语义上是等价的。 (x;y;z) { foo; }相当于x; while (y) { foo; z; }。它们在标准的其他版本中并不完全等效,在for (int x = 0; y; z)的示例中,x的范围是for block,并且在循环结束后超出范围,而{{1}在循环结束后它仍在范围内。

另一个区别是int x; while (y) x将缺少的for解释为TRUE,而y必须提供一个表达式。 while很好,但for (;;) { foo; }不是。

答案 1 :(得分:2)

这是我在调试模式下看到VS2010反汇编的一个小差异。不确定,是否足以算作重要普遍真正的差异(跨所有编译器和所有优化)。

因此从概念上讲这些循环是相同的,但在处理器级别,具有无限的消息循环,附加/不同指令的时钟周期可能不同并产生一些差异。

   while(1)
004113DE  mov         eax,1                       **// This is the difference**
004113E3  test        eax,eax                     **// This is the difference**
004113E5  je          main+2Eh (4113EEh)  
      f();
004113E7  call        f (4110DCh)  
004113EC  jmp         main+1Eh (4113DEh)          **// This is the difference**
   for(;;)
      f();
004113EE  call        f (4110DCh)  
004113F3  jmp         main+2Eh (4113EEh)          **// This is the difference**
} 

答案 2 :(得分:1)

没有区别。

除了在while循环中,你必须在那里放置一些真实条件,例如while(1)

另请参阅:Is "for(;;)" faster than "while (TRUE)"? If not, why do people use it?

此外,“更好”的可能是一个不是无限的。 :)

答案 3 :(得分:1)

没有区别。

但是

  

while()foo();

不一样
  

有(;; FOO())

记住!如果你在foo()语句之前打破了一段时间,foo()就不会执行,但如果你打破了for,foo()会执行......

答案 4 :(得分:0)

第一个不会编译。您至少需要:while( true )。它们在语义上是等价的。这是风格/个人选择的问题。

答案 5 :(得分:0)

它们都是相同的..现代编译器为两者发出相同的代码..有趣的是(历史上?)for(;;)更受欢迎.. pascal程序员做了#define(;;),并且使用过永远{// code}