C++ 对于(;true;)与while(true)不同?

C++ 对于(;true;)与while(true)不同?,c++,c,C++,C,如果我的理解是正确的,他们会做完全相同的事情。为什么会有人使用“for”变体?只是味道吗 编辑:我想我也想到了(;;)。是的,这只是味道。我从未见过(;真;)的。我看过(;;)的,唯一的区别似乎是味道。我发现C程序员稍微喜欢(;;)而不是while(1),但这仍然只是偏好。以防他们计划以后使用真正的for()循环。如果您看到for(;true;),则可能是要调试的代码。一些编译器(一直显示警告)会抱怨而(true)是一个永远不会失败的条件语句,而他们对(;;)很满意 出于这个原因,我更喜欢使用(

如果我的理解是正确的,他们会做完全相同的事情。为什么会有人使用“for”变体?只是味道吗


编辑:我想我也想到了(;;)。

是的,这只是味道。

我从未见过(;真;)
。我看过(;;)
,唯一的区别似乎是味道。我发现C程序员稍微喜欢(;;)
而不是
while(1)
,但这仍然只是偏好。

以防他们计划以后使用真正的for()循环。如果您看到for(;true;),则可能是要调试的代码。

一些编译器(一直显示警告)会抱怨
而(true)
是一个永远不会失败的条件语句,而他们对(;;)
很满意

出于这个原因,我更喜欢使用(;;)
作为无限循环的习惯用法,但我认为这没什么大不了的

for (;;)
通常用于防止编译器警告:

while(1)


通常会抛出一个编译器关于条件表达式为常量的警告(至少在最高警告级别)。

不是一个答案,而是一个注释:有时记住for(;x;)与while(x)相同(换句话说,当我检查if条件的中心表达式时只说“while”)帮助我分析讨厌的语句…
例如,很明显,中心表达式总是在循环的第一个过程开始时求值,这一点您可能会忘记,但当您以while()格式查看它时,它是完全明确的

有时候,记住这一点也很方便

a;
while(b) {
   ...
   c;
}
几乎(见评论)与

for(a;b;c) {
    ...
}

我知道这是显而易见的,但积极意识到这种关系确实有助于您在一种形式和另一种形式之间快速转换,以澄清混乱的代码。

优化编译器应该为这两种形式生成相同的程序集--无限循环。

编译器警告已经讨论过,所以我将从语义的角度来处理它。我使用while(TRUE)而不是for(;;),因为在我看来,while(TRUE)听起来比for(;;)更有意义。我把while(TRUE)读作“while TRUE总是TRUE”。就个人而言,这是代码可读性的改进

因此,宙斯禁止我不记录我的代码(当然,这是永远不会发生的),它只会比另一种方法更具可读性


但是,总的来说,这是一件非常挑剔的事情,99%的情况下都归结为个人偏好。

嗯。。。也许我就是这么想的。我一直用while。我和一个喜欢做{…}的人一起工作,而他(1);因为他说,更清楚的是,你总是开始循环,但可能会中途退出。他没有说服我。如果我总是需要跑一次,我会一直跑一次。而loopwhile(true)确实表明你几乎跑过一次。真的总是真的:)我不明白为什么这被否决了。这不是一个很好的答案,但它正确地回答了问题。很好的解释。我觉得有些C++开发者可能会惊讶于你的最后例子是等价的。它们不一样:一个连续语句导致“c”在“to”变体中被执行,而“C”在“while”变体中没有被执行。“亚当好点——我知道有一些微妙的东西我忘记了。”实际上,我有点担心它并没有那个么微妙:)另一个区别是,while示例中的c可能引用主体的变量。它应该是{a;而(b){{…}c;}
for(a;b;c) {
    ...
}