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

Can I safely assume that if(true) and if(false) will be optimized?

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

是的,性能很关键,是的,这个函数非常轻量级,所以即使是一个 if 也会影响速度,是的,这个函数需要在实时设备上执行无数次许多人的生命所依赖的。

简短的回答是 "yes"。编译器将评估常量表达式,并在分支中确定分支是始终采用还是从不采用。

这是一个例子:

#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