以下代码,如的C++中所述:编程和原则
struct Day {
vector <double> hour { vector <double> (24,-7777)}
};
struct Month {
vector <Day> day {32};
};这段代码初始化32天,每天作为一个24小时的vector用-7777初始化;
问题是为什么列表初始化器{32}创建32天。不是应该用32作为初始值来初始化vector ,而不是创建32个成员吗?
发布于 2019-11-15 09:55:13
对于列表初始化,
否则,将分两个阶段考虑
T的构造函数: 所有以std::initializer_list作为唯一参数的构造函数,或者如果其余参数具有默认值的情况下作为第一个参数的构造函数,都会被检查,并通过重载解析与std::initializer_list类型的单个参数进行匹配。 如果上一阶段不生成匹配,则T的所有构造函数都参与针对包含大括号元素的参数集的过载解析,但有一个限制,即只允许不缩小转换。如果此阶段生成显式构造函数作为复制列表初始化的最佳匹配,则编译失败(注意,在简单复制初始化中,显式构造函数根本不被考虑)。
day的类型是vector <Day>,其std::initializer_list作为参数需要一个std::initializer_list<Day>,而std::initializer_list<Day>不能从带括号的初始化器{32}中构造。然后使用size_type并使用32个默认插入的Day实例构造Day。
另一方面,如果Day可以从int初始化,例如有一个以int为构造函数的构造器,那么由于从int到Day的隐式转换,可以从{32}构造std::initializer_list<Day>,那么vector <Day> day {32};将使用从32初始化的一个元素来构造vector。
发布于 2019-11-15 09:54:38
一个参数初始化器列表与接受一个参数的向量构造函数相匹配,该参数分配多个元素。在本例中是32。
https://stackoverflow.com/questions/58874308
复制相似问题