繁体   English   中英

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

[英]Vector of (Structs having vector)

Bjarne Stroustroup 的 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 个成员吗?

对于 列表初始化

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

所有将std::initializer_list作为唯一参数或作为第一个参数的构造函数,如果剩余的 arguments 具有默认值,则通过重载决议对std::initializer_list类型的单个参数进行检查和匹配

如果前一阶段没有产生匹配,则T的所有构造函数都参与针对由括号初始化列表的元素组成的 arguments 集的重载决议,限制只允许非缩小转换。 如果此阶段生成一个显式构造函数作为复制列表初始化的最佳匹配,则编译失败(注意,在简单的复制初始化中,根本不考虑显式构造函数)。

dayvector <Day>类型,其std::initializer_list作为参数的构造函数需要一个std::initializer_list<Day> ,它不能从花括号初始化器{32}构造。 然后使用采用size_type的构造函数,并使用 32 个默认插入的Day实例构造vector

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

居住

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM