for(;;)和while(1)有什么区别?

5

6
你如何将一篇提到C++最佳实践的问题指向C#最佳实践的答案?抱歉,这是荒谬的。我投票支持重新开放。 - sbi
编译速度会有差异吗?一般程序员被认为使用 while 而不是 for。 - abhinav
@sbi:我认为混淆的原因在于两个问题的答案几乎相同。但是我同意,这确实是一个明显不同的问题。 - Cody Gray
1
如果有的话,这是一个更合适的重复问题链接:https://dev59.com/AXE85IYBdhLWcg3wyGt_ - Cody Gray
@Cody:确实是这样。它是一个_完全相同的_副本吗?我们是否应该关闭这个问题并指向它?(即使最佳实践语法问题的答案在不同编程语言之间几乎是等效的,_最佳实践语法_仍然需要针对特定编程语言进行提问。而且我的答案甚至不适用于C#,因为它没有像C++那样多的编译器。) - sbi
10个回答

9

完全没有功能上的区别,只是个人口味问题。


9
与这些不同的是,许多编译器会警告 while(true) ("循环表达式使用了常量表达式"),但我所知道的没有一个编译器会警告 for(;;)
不过它们应该生成相同的代码。

这似乎是for(;;)的一个巨大优势,因为没有人会无意中编写while(true)for(;;) - Stuart Golodetz
@sgolodetz:我认为我的回答已经暗示了我更喜欢哪一个。 - sbi
我猜是的。抱歉,可能不需要插手那里... - Stuart Golodetz

8

使用 for,您可以这样做:

#define ever (; ;) // note the two happy faces? ;)

for ever { ... }   // endless loop
< p > 这是 while 无法实现的。 < /p >

2
+1 以增加创意,但你可以写成:#define forever (1) while forever {...} - Baltasarq
6
那只是一个... 太糟糕的想法了。无法形容。 - user229044
能否这样定义 #define forever for(; ;), 然后使用 forever{ --age } ... - flcoder

6
  • 除非显式调用break,否则两者都会导致无限循环。
  • 个人更喜欢使用while(1),它更易读。

这绝对是个人口味的问题;我觉得 for(;;) 更易读。 - user229044
+1 for (;;) {在Java和JavaScript中同样适用} - bestsss

4
没有区别。我更喜欢后者。

编译时会有速度差异吗?另外,Saurav,你看到我的其他问题了吗?自动换挡,我期待着你的回答! - abhinav
@abhinav:不,生成的机器代码在这两种情况下很可能是相同的。就我所看到的,您已经接受了那个问题的答案。 - Prasoon Saurav
@saurav 我已经接受了这个答案,但我仍然期待不同的方法。 - abhinav
@saurav,你能告诉我应该参考哪本C++书吗?我正在读大一工程专业,对这门语言不是很了解。 - abhinav
1
@abhinav:阅读Stan Lippman的C++ Primer。 - Prasoon Saurav

4
一方面是6,另一方面是110。后者似乎更为简洁。

0

在C++中,两者是相同的。然而,你的帖子标记了c#c++

如果你正在使用C#,你需要使用while (true) {...}。个人而言,我更喜欢在C++中使用相同的方式:只有在处理数字时才使用数字!当处理布尔值时,使用truefalse


0

它们都定义了完全相同的功能行为,并从C#生成完全相同的IL代码。


0

没有区别,除非你想稍后使用某种计数器,如下所示。

for (int i =0; i < 100; i++) {
   // some code
} 

-1

我是老派的,我还在做以下工作:

#define TRUE 1  
#define FALSE 0  
while (TRUE) { /*--do something, mutley--* }

7
那么,原来是你啊... >_< - Karl Knechtel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接