C++ 什么对(;){}或while(true){}更好?

C++ 什么对(;){}或while(true){}更好?,c++,c,C++,C,可能重复: 我想知道哪个无限循环更可取: for(;;) { // Do some stuff } 或 从性能的角度来看,它们之间有什么区别吗 从编码标准的角度来看,什么更可取?没有区别while(true)对某些人来说可能更明显。没有区别while(true)对某些人来说可能更明显 从性能的角度来看,它们之间有什么区别吗 没有,一点也没有 我使用(;;)< /C> >但原因是异想天开:它看起来像代码>(…)/ (这是C++社区中一个已建立的习惯用法)。 从性能的角度来看,它们之间有

可能重复:

我想知道哪个无限循环更可取:

for(;;) {
    // Do some stuff
}

从性能的角度来看,它们之间有什么区别吗


从编码标准的角度来看,什么更可取?

没有区别<代码>while(true)对某些人来说可能更明显。

没有区别
while(true)
对某些人来说可能更明显

从性能的角度来看,它们之间有什么区别吗

没有,一点也没有

我使用<代码>(;;)< /C> >但原因是异想天开:它看起来像<>代码>(…)/ <代码>(这是C++社区中一个已建立的习惯用法)。 从性能的角度来看,它们之间有什么区别吗

没有,一点也没有


我使用<代码>(;;)<代码>,但原因是异想天开:它看起来像是<代码>(…)/ <代码>(这是C++社区中一种已建立的习惯用法)。

< P>两者之间的差别不大。当您知道要遍历多少个元素时,通常使用。如果需要满足某个条件,则使用while-if,两者之间的差异不大。当您知道要遍历多少个元素时,通常使用。如果需要满足某个条件,则使用while,从性能角度看,这无关紧要。编译器将两者优化为相同的汇编代码。从“编码标准”的角度来看,for(;;)更简洁,这很好。虽然while(TRUE)更清晰一些,但是for(;;)非常常见,因此在这种情况下,清晰性并不是什么大问题(事实上,for(;;)的普遍性可能会使它比while版本更清晰)。

从性能角度看,这并不重要。编译器将两者优化为相同的汇编代码。从“编码标准”的角度来看,for(;;)更简洁,这很好。虽然while(TRUE)更清晰一些,但是for(;;)非常常见,因此在这种情况下,清晰性并不是什么大问题(事实上,for(;;)的普遍存在可能会使它比while版本更清晰)。

这是品味的问题,尤其是使用的编码约定的问题。最好在同一个项目中的任何地方都使用一种样式,或者在选择样式时使用相同的规则。许多C++框架也提供了宏作为永久性的元素,在我看来,在使用框架的代码中应该是首选的。生成的代码应该没有区别。

这是品味的问题,但特别是使用的编码约定的问题。最好在同一个项目中的任何地方都使用一种样式,或者在选择样式时使用相同的规则。许多C++框架也提供了宏作为永久性的元素,在我看来,在使用框架的代码中应该是首选的。生成代码不应该有差别。< /p>或<代码>(1)< /> >或<代码>(true) >如果您在C++中,或包含“代码> <代码>或……有多少天使能在一根针头上跳舞?这是一个无法回答的问题;没有功能上的区别,这只是一个品味的问题。(我键入这个作为答案):我喜欢(;;)的唯一原因是VC编译器在使用
while(true)
while(1)
构造并且警告设置为最高级别(
W4
)时发出以下警告:
警告C4127:条件表达式是常量
,这很烦人,特别是当警告被视为错误时(
WX
)。我不理解所有的反对票,这看起来是一个完全有效的问题。@hmjd,看看这个问题的答案,这个问题是重复的,你会发现它在那里。“KoRADRoOLPHT看起来像是重复的,或者是<代码>,而(1)或 >(true)(如果你在C++中,或者你已经包含了<代码> <代码>……有多少天使能在一根针头上跳舞?这是一个无法回答的问题;没有功能上的区别,这只是一个品味的问题。(我键入这个作为答案):我喜欢(;;)的唯一原因是VC编译器在使用
while(true)
while(1)
构造并且警告设置为最高级别(
W4
)时发出以下警告:
警告C4127:条件表达式是常量
,这很烦人,特别是当警告被视为错误时(
WX
)。我不理解所有的反对票,这看起来是一个完全有效的问题。@hmjd,看看这个问题的答案,这个问题是重复的,你会在那里找到它。@KonradRudolph因为重复,看起来像是否决票。“许多…框架”-你能举个例子吗?我从未在真正的框架中看到过这一点。事实上,我认为这至少是反对使用框架(免费使用宏!)的一个原因。此外,我还使用了一些内部框架。在Qt中,您可以禁用它以避免名称空间混乱。“许多…框架”-您能举个例子吗?我从未在真正的框架中看到过这一点。事实上,我认为这至少是反对使用框架(免费使用宏!)的一个原因。此外,我还使用了一些内部框架。在Qt中,您可以禁用它以避免名称空间混乱。
#define TRUE 1

while(TRUE) {
    // Do some stuff
}