我希望编译器能为你带来魔力,但是,下面两段代码之间是否会有任何性能差异?
if (! something.isTrue) {
pathFalseFunc();
} else {
pathTrueFunc();
}
和
if (something.isTrue) {
pathTrueFunc();
} else {
pathFalseFunc();
}
答案 0 :(得分:8)
都能跟得上!如果您看到两个块的assembly level code,它们看起来会相同。所以,没有任何区别。
这里假设您没有超载!
运算符。如果你重载!
运算符,那么第二个块将更有效,只需要一点点(当然,它将取决于你如何重载运算符)。
答案 1 :(得分:6)
正常情况下,Abhishek指出不会有性能差异。但是,如果something.isTrue
是一个重载operator!
的类类型,那将是一个完全不同的故事。在这种情况下,!something.isTrue
调用operator!
,而something.isTrue
则要求进行bool
的上下文转换。
答案 2 :(得分:0)
与HLL一样,它取决于优化器。但是,如果我们考虑机器代码级别,那么可能会有跳跃而不是跳跃之间的区别。虽然它的架构/对齐/提示依赖,但通常在运行流程更平坦时更好,即分支在不太可能的条件下进行。