使用not equal和just equal时是否有任何性能差异

时间:2015-05-07 13:44:16

标签: c++ performance

我希望编译器能为你带来魔力,但是,下面两段代码之间是否会有任何性能差异?

        if (! something.isTrue) {
            pathFalseFunc();
        } else {
            pathTrueFunc();
        }

        if (something.isTrue) {
            pathTrueFunc();
        } else {
            pathFalseFunc();
        }

3 个答案:

答案 0 :(得分:8)

都能跟得上!如果您看到两个块的assembly level code,它们看起来会相同。所以,没有任何区别。

这里假设您没有超载!运算符。如果你重载!运算符,那么第二个块将更有效,只需要一点点(当然,它将取决于你如何重载运算符)。

答案 1 :(得分:6)

正常情况下,Abhishek指出不会有性能差异。但是,如果something.isTrue是一个重载operator!的类类型,那将是一个完全不同的故事。在这种情况下,!something.isTrue调用operator!,而something.isTrue则要求进行bool的上下文转换。

答案 2 :(得分:0)

与HLL一样,它取决于优化器。但是,如果我们考虑机器代码级别,那么可能会有跳跃而不是跳跃之间的区别。虽然它的架构/对齐/提示依赖,但通常在运行流程更平坦时更好,即分支在不太可能的条件下进行。