我可以安全地假设if(true)和if(false)将被优化吗?

时间:2016-12-30 11:05:07

标签: c++ optimization g++ clang++

在我的代码中,我有一个带bool value模板参数的函数。 truefalse情况下函数的实现几乎完全相同,除了一行。所以我想我会放一个if(value)语句来避免重写相同的函数两次。调用函数时,value在编译时确定,因此if语句缩减为if(true)if(false)。 现在,我想知道:假设任何合理的编译器(比如g++clang++,......)会优化该语句是否安全?

是的,性能至关重要,是的,该功能非常轻巧,因此即使单个if也会影响速度,是的,这个功能需要在实时设备上执行数十亿次人的生命依赖。

1 个答案:

答案 0 :(得分:7)

简短的回答是“是”。编译器将评估常量表达式,并且在分支中,它将确定是否总是或从不采用分支。

以下是一个例子:

#include <stdio.h>
void test(void) {
  if (false) {
    puts("Hello, world!");
  }
}

这是输出程序集:

test():
        push    rbp
        mov     rbp, rsp
        nop
        pop     rbp
        ret

请注意,甚至不会调用puts。这是GCC 6.3,未启用优化(优化已关闭关闭,这仍然是正确的方式)。

请参阅:https://godbolt.org/g/PJ7lSf