是否所有模板实例都生成一个新类?

时间:2017-04-18 03:25:28

标签: c++ c++11 templates

因此模板元编程最常见的例子之一就是计算第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会产生更好的可执行文件大小/编译器性能吗?

0 个答案:

没有答案