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

Mat*_*nti 0 c++ optimization g++ clang++

在我的代码中,我有一个带bool value模板参数的函数.除了一行之外,在truefalse案例中函数的实现几乎完全相同.所以我想我会if(value)发表一个声明,以避免重写相同的函数两次.调用函数时,value在编译时确定,因此if语句缩减为a if(true)或a if(false).现在,我想知道:这是安全的假设,任何合理的编译器(比如说g++,clang++...)将优化这种说法?

是的,性能至关重要,是的,功能非常轻巧,因此即使是单一的if也会影响速度,是的,这个功能需要在许多人类赖以生存的实时设备上执行数万次.

Die*_*Epp 7

简短的回答是"是".编译器将评估常量表达式,并且在分支中,它将确定是否始终采用分支.

这是一个例子:

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

这是输出组件:

test():
        push    rbp
        mov     rbp, rsp
        nop
        pop     rbp
        ret
Run Code Online (Sandbox Code Playgroud)

请注意,puts甚至不会发出任何调用.这是GCC 6.3,没有启用优化(优化已关闭,这仍然以正确的方式发生).

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