在 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的主要内容,如果未能解决你的问题,请参考以下文章
1. while循环(当循环) 2. do{}while()循环 3. switch cose(多选一) 例子:当选循环下求百鸡百钱 用 switch cose人机剪刀石头布