的向量(具有向量的结构)

Vector of (Structs having vector)

本文关键字:向量 结构      更新时间:2023-10-16

Bjarne Stroustgroup的C++中所述的以下代码:编程与原理

struct Day {
vector <double> hour { vector <double> (24,-7777)}
};
struct Month {
vector <Day> day {32};
};

这段代码初始化32天,每天作为用-7777初始化的24小时的vector

问题是为什么列表初始化器{32}会创建32天不是应该用32作为初始值来初始化第vector天,而不是创建32个成员吗

对于列表初始化,

否则,T的构造函数将分两个阶段考虑:

所有以CCD_ 6为唯一自变量的构造函数,或者作为第一个参数(如果其余参数具有默认值(值进行检查,并根据std::initializer_list类型的单参数

如果前一阶段没有产生匹配,则T的所有构造函数参与针对以下参数集的过载解决由支撑的init列表的元素组成,具有限制只允许非窄化转换。如果这个阶段生成一个显式构造函数作为复制列表初始化,编译失败(注意,简单复制初始化,完全不考虑显式构造函数(。

day的类型为vector <Day>,其构造函数以std::initializer_list为参数,需要一个std::initializer_list<Day>,而CCD_12不能从支撑初始化器{32}构造。然后使用采用size_type的构造函数,并使用32个默认插入的Day实例来构造vector

另一方面,如果Day可以从int初始化,例如具有采用int的构造函数,则由于从intDay的隐式转换,std::initializer_list<Day>可以从CCD21构造,则vector <Day> day {32};将使用从32初始化的一个元素来构造vector

实时

单参数初始值设定项列表与采用一个参数的向量构造函数相匹配,该构造函数分配了那么多元素。在这种情况下为32。