C++ 向量(具有向量的结构)
下面是比亚恩·斯特劳斯特鲁普的C++中所述的一段代码:编程和原理C++ 向量(具有向量的结构),c++,c++11,vector,struct,initialization,C++,C++11,Vector,Struct,Initialization,下面是比亚恩·斯特劳斯特鲁普的C++中所述的一段代码:编程和原理 struct Day { vector <double> hour { vector <double> (24,-7777)} }; struct Month { vector <Day> day {32}; }; struct-Day{ 向量小时{向量(24,-7777)} }; 结构月{ 病媒日{32}; }; 这段代码初始化32天,每天作为24小时的向量,用-7777初
struct Day {
vector <double> hour { vector <double> (24,-7777)}
};
struct Month {
vector <Day> day {32};
};
struct-Day{
向量小时{向量(24,-7777)}
};
结构月{
病媒日{32};
};
这段代码初始化32天,每天作为24小时的向量
,用-7777
初始化
问题是为什么列表初始值设定项
{32}
会创建32天它不是应该用32作为初始值来初始化day向量,而不是创建32个成员吗?
单参数初始值设定项列表与使用一个参数的向量匹配,该向量分配了那么多元素。在这种情况下,32.对于
否则,将分两个阶段考虑T
的构造函数:
将std::initializer\u list
作为唯一参数的所有构造函数,
或者,如果其余参数具有默认值,则作为第一个参数
值进行检查,并通过针对
类型为std::initializer\u list
如果前一阶段没有生成匹配项,T的所有构造函数
参与针对以下参数集的重载解析:
由带大括号的init列表的元素组成,带有限制
只允许非窄化转换。如果这个阶段
生成显式构造函数作为
复制列表初始化,编译失败(注意,简单
复制初始化,根本不考虑显式构造函数)
day
的类型为vector
,其as参数需要一个std::initializer\u列表
,该列表不能从带括号的initializer{32}
构造。然后使用并构造带有32个默认插入的日
实例的向量
另一方面,如果可以从int
初始化Day
,例如,有一个构造函数取int
,那么std::initializer\u list
可以从{32}
构造,因为从int
到Day
的隐式转换,然后向量日{32}
将使用一个从32
初始化的元素构造向量
如何将32
作为(单数)Day
对象的合适初始值?vector Day{32}
类似于vector Day(32)
。如果你看一下向量定义,它说参数是vector@BAdhi确定吗?只有包含在(n)中的参数才能创建n项的向量。。。而{n}初始化一个可能的向量