【发布时间】:2019-04-27 09:32:37
【问题描述】:
这个问题主要针对编译型编程语言。这纯粹是出于好奇,因为我相信使用这两个运算符之一的性能增益会非常小。
考虑一个 for 循环,当您满足某个条件时,您希望将 true 存储在布尔值中:
b = false
for i in 1..N:
if someCondition(i):
b = true
moreThatNeedsToBeDone(i)
endfor
现在考虑用 OR EQUAL 代替相同的 for 循环
b = false
for i in 1..N:
if someCondition(i):
b |= true
moreThatNeedsToBeDone(i)
endfor
如果条件满足不止一次,理论上后者会更快吗?或者至少,它会做更少的操作吗?通常,OR EQUAL 评估变量,如果它为真,则它不做任何事情,因此与 EQUAL 运算符相比,它不会多次存储真值。但是在写这篇文章时,我意识到 OR EQUAL 无论如何都会添加一个额外的操作来评估/读取变量的当前值。那么哪个会更快或操作更少?
【问题讨论】:
-
取决于分配后的
...。一旦 b 设置为 true ,您也可以中断循环 is...是无操作的。剩下的就是现在很少相关的边际优化。 -
是的,一旦 b 为真,我就想过打破,但这就是我添加
...的原因。...是需要做的事情,换句话说,我们不能在循环结束之前中断。我知道这真的不相关,只是我脑海中突然出现的一个问题,想知道是否有人可以提供关于 SO 的答案。
标签: performance variable-assignment assignment-operator