Your current code would normally be written as follows, I believe:
constexpr factorial (int n)
{
return n > 0 ? n * factorial( n - 1 ) : 1;
}
If you call it with a constant-expression, such as factorial(5)
, then all the compiler magic will come into play. But if you do int a = 3; factorial(a)
, then I think it will fall back on a conventional function - i.e. it won't have built a lookup table of pre-computed answers.
In general, you should mark every function and constructor as constexpr
if you can. You lose nothing, the compiler will treat it as a normal function if necessary.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…