向量(具有向量的结构)

时间:2019-11-15 09:46:56

标签: c++ c++11 vector struct initialization

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

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

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

问题是为什么列表初始化程序{32}创建32天。 难道不是要以32个初始值来初始化vector天而不是创建32个成员吗?

2 个答案:

答案 0 :(得分:2)

对于list initialiation

  

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

     

所有将std::initializer_list作为唯一参数的构造函数,   或作为第一个参数(如果其余参数具有默认值)   值进行检查,并通过过载分辨率与   类型为std::initializer_list

的单个参数      

如果上一阶段未产生匹配项,则T的所有构造函数   参与针对一组参数的重载解析   由braced-init-list的元素组成,但有限制   仅允许非缩小转换。如果这个阶段   产生一个显式构造函数,作为与之的最佳匹配   复制列表初始化,编译失败(注意,简单   复制初始化,根本不考虑显式构造函数。

day类型为vector <Day>,其constructor taking std::initializer_list作为参数需要一个std::initializer_list<Day>,它不能由支撑初始化器{32}构造。然后使用constructor taking size_type并用vector的32个默认插入的实例构造Day

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

LIVE

答案 1 :(得分:0)

一个参数初始化器列表与带有一个参数的向量constructor匹配,该向量分配了那么多元素。在这种情况下32。

相关问题