Mat*_*nti 0 c++ optimization g++ clang++
在我的代码中,我有一个带bool value
模板参数的函数.除了一行之外,在true
和false
案例中函数的实现几乎完全相同.所以我想我会if(value)
发表一个声明,以避免重写相同的函数两次.调用函数时,value
在编译时确定,因此if
语句缩减为a if(true)
或a if(false)
.现在,我想知道:这是安全的假设,任何合理的编译器(比如说g++
,clang++
...)将优化这种说法?
是的,性能至关重要,是的,功能非常轻巧,因此即使是单一的if
也会影响速度,是的,这个功能需要在许多人类赖以生存的实时设备上执行数万次.
简短的回答是"是".编译器将评估常量表达式,并且在分支中,它将确定是否始终采用分支.
这是一个例子:
#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