为什么初始化 std::vector 时不能使用模板整数?

Why can't I use a template integer when initializing a std::vector?

本文关键字:整数 不能 初始化 std vector 为什么      更新时间:2023-10-16

我正在尝试创建一个包含 D 元素的 std::vector 的类 BigInt。

template<int D>
class BigInt
{
public:
std::vector<short> digit(D, 0);
};

我收到一个错误,指出"D"不是一种类型

问题是默认成员初始值设定项(自 C++11 以来(仅支持等号(或大括号(初始值设定项,但不支持 括号初始值设定项。

您可以

template<int D>
class BigInt
{
public:
std::vector<short> digit = std::vector<short>(D, 0);
};

还可以在构造函数中使用成员初始值设定项列表,而不是默认成员初始值设定项

template<int D>
class BigInt
{
public:
std::vector<short> digit;
BigInt() : digit(D, 0) {}
};

顺便说一句:std::vector<short>(D, 0)std::vector<short>(D)具有相同的效果;为了方便起见,您可以使用后者。