因此模板元编程最常见的例子之一就是计算第N个斐波纳契数:
template <int T>
struct Fibonacci
{
enum { value = (Fibonacci<T - 1>::value + Fibonacci<T - 2>::value) };
};
template <>
struct Fibonacci<0>
{
enum { value = 1 };
};
template <>
struct Fibonacci<1>
{
enum { value = 1 };
};
template <>
struct Fibonacci<2>
{
enum { value = 1 };
};
int main()
{
cout << Fibonacci<45>::value << endl;
}
这很酷,但如果您为Fibonacci<N>
的100个不同值调用N
,该怎么办?不希望编译器生成100个不同版本的Fibonacci
,从而炸毁了可执行文件的大小? typename
vs int
(或其他一些数据类型)的类生成规则是否不同,或者它们是否相同,即每个模板参数的唯一组合生成一个类?
constexpr
会产生更好的可执行文件大小/编译器性能吗?