在结构中创建包含 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);
};
如果我只写这段代码:
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);
};