我知道 C++ 中的一些元编程技术可以在编译时计算常量。大多数情况下,元函数中的分支是通过三元运算符完成的,与标准 if/else 相反,可以在编译时进行评估。
但是关于这种功能:
template <unsigned int N>
void f()
{
if (N == 0) {
// Some computations here
} else if (N <= 42) {
// Some computations here
} else {
// Some computations here
}
}
编译器会做什么(假设-O3
)?编译器知道f<0>()
总是在第一种情况下f<32>()
分支,总是在第二种情况下f<64>()
分支,并且总是在第三种情况下分支。
编译器会删除永远存在的分支false
吗?它会直接分支到唯一有效的情况吗?