为什么我们需要模板<int n =“”>,因为我们有类初始化

时间:2017-05-10 08:26:29

标签: c++

最近我知道了一个新的模板用法,如下面的

template <unsigned int N>

我在这里看到了答案 What does template <unsigned int N> mean? 它显示了几个例子包括:

template<unsigned int S>
struct Vector {
    unsigned char bytes[S];
};

但是,我无法弄清楚这种用法的重点。 为什么我们不使用类初始化来完成这项工作。 这里使用模板的重点是什么?

1 个答案:

答案 0 :(得分:1)

必须在编译时知道类的大小。因此,您无法在类初始化时提供大小。这包括类中包含的任何固定大小的数组的大小。

为了混淆问题,有一些编译器扩展允许你使用动态分配大小的固定大小数组的语法,但这不是标准的C ++。

即使像std::vector这样的类具有固定大小,但它们对其内容使用动态内存分配,因此可以在类初始化时提供内容的大小。此类容器包含指向动态分配的内存的指针,而不是固定大小的数组。