在 While 循环中使用 1 == 1 或 true

Posted

技术标签:

【中文标题】在 While 循环中使用 1 == 1 或 true【英文标题】:The use of 1 == 1 or true in While loops 【发布时间】:2015-12-22 06:25:15 【问题描述】:

我最近遇到了一个使用 1 == 1 而不是 true 的 while 语句。

例子:

while (1 == 1) 

   // Do something

代替:

while (true)

   // Do something

它们看起来都是正确的并产生相同的结果,但我想知道(除了为什么开发人员会使用 1 == 1 而不是 true - 除了风格/习惯之外)从编译器的角度来看这会产生什么影响,是使用比较运算符而不是 true 会产生更大的开销吗?

【问题讨论】:

我认为,没有区别,只是习惯 使用 for(;;) 并节省几个字节 ;) 适合 code golf @CallumBradbury,我相信我已经将while (true) 用于我想要持续运行直到整个程序停止的线程 投票重新开放。这个问题一个明确的答案,正如@DavidL 用他的答案证明的那样。 @DmytroShevchenko 谢谢,无论如何我已经编辑了问题以满足问题指南。这也让 DavidL 的回答更加贴切。 【参考方案1】:

没有区别。编译器会将它们优化为相同的 IL。

1 == 1

IL_0000:  nop         
IL_0001:  br.s        IL_0005
IL_0003:  nop         
IL_0004:  nop         
IL_0005:  ldc.i4.1    
IL_0006:  stloc.0     // CS$4$0000
IL_0007:  br.s        IL_0003

是的

IL_0000:  nop         
IL_0001:  br.s        IL_0005
IL_0003:  nop         
IL_0004:  nop         
IL_0005:  ldc.i4.1    
IL_0006:  stloc.0     // CS$4$0000
IL_0007:  br.s        IL_0003

其中任何一种选择纯粹是开发人员的风格偏好。

【讨论】:

* 1 == 1 尖叫,“注意你的脚步;这里发生了一些有趣的事情”; * 在浏览代码时,while(true) 可能会被误认为是函数调用 (c.f. DoStuff(true))。 @KaspervandenBerg 这对于编写良好的自文档化代码来说无疑是一个极好的观点。尽管就个人而言,我认为这两种情况都会受益于围绕它的大量文档,因为您需要一个很好的理由来这样做。 感谢@DavidL,我完全忘记了使用 ildasm 在 IL 级别比较这两个语句。 @Steve 乐于助人。 LinqPad 是此类事情的另一个有用工具。它并不总是包含每条说明,但它会记录最重要的步骤,让您快速分解。 由于语义相同,我认为开发人员的偏好只能是风格或视觉,或者他们可能缺少手指。

以上是关于在 While 循环中使用 1 == 1 或 true的主要内容,如果未能解决你的问题,请参考以下文章

Hangfire循环任务20分钟后停止,是啥原因

while循环案例

python基础二

Python:使用 while 或 for 循环遍历列表

JS循环结构

1. while循环(当循环) 2. do{}while()循环 3. switch cose(多选一) 例子:当选循环下求百鸡百钱 用 switch cose人机剪刀石头布