【发布时间】:2014-11-27 21:58:50
【问题描述】:
我经常听到这个问题,以至于实际上质疑它 - 许多人说,在 if-else 语句中,应该将最有可能为真的条件放在首位。所以,如果condition大部分时间可能为假,则将!condition放在if语句中,否则使用condition。一些人为的说明我的意思:
if (likely) {
// do this
} else {
// do that
}
if (!unlikely) {
// do this
} else {
// do that
}
有人说这样效率更高——可能是由于分支预测或其他优化,我从来没有真正询问过该主题何时被破坏——但据我所知,总会有一个测试,并且两条路径都会导致跳转。
所以我的问题是 - 是否有一个令人信服的理由(“令人信服的理由”可能是一个微小的效率提升)为什么最有可能为真的条件应该首先出现在 if-else 语句中?
【问题讨论】:
-
我以前没有听过这个特别的建议。我怀疑这只是个人喜好。
-
从来没有这样听过。应该没关系,
-
我个人不喜欢
if (!...) else,因为我总是需要一个额外的时钟周期才能弄清楚如何到达else块。 -
@templatetypedef 对于现代 CPU 上的单个 if/else 不应该也没有理由这样做 - 将是个人偏好,但对于嵌套 if/else_if/else_if/else 手动排序可能会有显着收益分支取决于数据。
标签: if-statement language-agnostic