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

H-0*_*005 2 c++ templates initialization class vector

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

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

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

son*_*yao 5

问题是默认成员初始值设定项(自 C++11 起)仅支持等号(或花括号)初始值设定项,而不支持括号初始值设定项。

你可以

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

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

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

        BigInt() : digit(D, 0) {}
};
Run Code Online (Sandbox Code Playgroud)

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