众所周知,当constexpr function的返回值在 时无法知道时compile-time,将延迟到run-time(IOW, 衰减到non-constexpr function) 时计算。这使我们可以自由地坚持constexpr一个功能,而不必担心任何开销。
我认为它也可以适用于if statement. 从 c++17 开始,我们有了if constexpr,所以我们可以compile-time if statement很容易地使用(没有true_type/ false_type。constexpr function但是,与 不同的是,如果在编译时无法知道其条件,它将失败:
constexpr int factorial(int n)
{
if constexpr(n == 0) return 1;
else return n * factorial(n-1);
}
所以,上面的代码不能通过编译,因为n不是常量表达式。但可以肯定的是,可以在 compile-time 知道输入时计算该函数compile-time。