在结构中创建包含 n 个元素的向量

Creating a vector with n elements in a struct

如果我只写这段代码:

std::vector<int> vec(24, 3);

它将创建一个名为 vec 的向量,其中有 24 个元素都等于 3。 但是如果我有一个结构:

struct Day
{
    std::vector<int> days(24, 3);
};

然后尝试做完全相同的事情却行不通,这是为什么?

语法为:

struct Day
{
    vector<int> days = vector<int>(24, 3);
};

您不能在那里使用 () 语法调用构造函数(以避免 vexing parse)(但可以使用 {}= /*...*/)。

struct Day
{
    std::vector<int> days(24, 3);
};

正如另一个答案中已经提到的,您不能使用 () 调用构造函数,因为该语法会触发 most vexing parse.

事实上,days会被解释为一个成员函数Day::days()的声明,返回一个std::vector<int>,并取两个参数。但是,没有指定这些参数的类型,因此会出现编译时错误。

有趣的是,您 可能 考虑使用带有大括号 统一初始化 语法调用构造函数 {} :

struct Day
{
    std::vector<int> days{24, 3};  // Pay attention!
};

这段代码可以编译;但它创建了一个 错误的 向量,这不是您所期望的。事实上,它创建了一个包含两个整数 24 和 3 的向量。这是因为此语法调用 std::vector 构造函数获取初始化列表,而不是 (element count, element value) 你的意思是构造函数重载。

因此,一个有效的选择是使用更详细的语法:

struct Day
{
    std::vector<int> days = std::vector<int>(24, 3);
};