众所周知,当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
。