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

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

我正在尝试创建一个 class BigInt,其中包含 std::vector 和 D 元素。

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

我收到一条错误消息,指出 'D' 不是类型

问题是default member initializer(C++11 起)只支持等号(或大括号)初始化器,但不支持 括号初始值设定项。

你可以

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

您也可以在构造函数中使用 member initializer list 而不是 默认成员初始化程序

template<int D>
class BigInt
{
    public:
        std::vector<short> digit;

        BigInt() : digit(D, 0) {}
};

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