constexpr if
— C++ 20
constexpr if
可以让我们实现条件编译
template <typename T>
auto getResult(T t)
{if constexpr (std::is_integral_v<T>)return *t;elsereturn t;
}
如果T
是intergral
类型,执行第一个分支,否则执行第二个分支
还记得前文写过的模板元编程递归求N次方吗? 使用constexpr if
可以使我们的代码更加的优雅
template <int N>
constexpr int factorial()
{if constexpr (N >= 2)return N * factorial<N - 1>();elsereturn N;
}int main()
{cout << factorial<10>() << endl;
}
constexpr if
也会使得斐波那契数列更加的优雅
template <int N>
constexpr int fibonacci()
{if constexpr (N >= 2)return fibonacci<N - 1>() + fibonacci<N - 2>();elsereturn N;
}