在我的代码中,我有一个带bool value
模板参数的函数。 true
和false
情况下函数的实现几乎完全相同,除了一行。所以我想我会放一个if(value)
语句来避免重写相同的函数两次。调用函数时,value
在编译时确定,因此if
语句缩减为if(true)
或if(false)
。
现在,我想知道:假设任何合理的编译器(比如g++
,clang++
,......)会优化该语句是否安全?
是的,性能至关重要,是的,该功能非常轻巧,因此即使单个if
也会影响速度,是的,这个功能需要在实时设备上执行数十亿次人的生命依赖。
答案 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,未启用优化(优化已关闭关闭,这仍然是正确的方式)。