java调用空构造_空括号调用默认构造函数或构造函数采用std :: initializer_list吗?...

对象或类型T的引用的列表初始化定义如下:如果初始化列表没有元素且T是具有默认构造函数的类类型,则对象是值初始化的 . 否则,如果T是聚合,则执行聚合初始化(8.5.1) . double ad [] = {1,2.0}; // 好

int ai [] = {1,2.0}; //错误:缩小

struct S2 {

int m1;

双m2,m3;

};

S2 s21 = {1,2,3.0}; // 好

S2 s22 {1.0,2,3}; //错误:缩小

S2 s23 {}; // OK:默认为0,0,0

我们可以看到它是不是聚合,然后列表继续说:

否则,如果T是std :: initializer_list的特化,则如下所述构造initializer_list对象,并用于根据相同类型的类(8.5)中的对象初始化规则初始化对象 . 否则,如果T是类类型,则考虑构造函数 . 枚举适用的构造函数,并通过重载决策(13.3,13.3.1.7)选择最佳构造函数 . 如果转换任何参数需要缩小转换(见下文),则程序格式错误 .

我们可以确认 std::array 是 23.3.2.1 [array.overview]部分的聚合:

数组是一个聚合(8.5.1),可以使用语法数组 a =初始化;

其中initializer-list是一个逗号分隔的列表,最多包含N个元素,其类型可转换为T.

引用的 8.5.1 部分是 8.5.1 聚合[dcl.init.aggr]并说:

当初始化程序列表初始化聚合时,如8.5.4中所述,初始化程序列表的元素被视为聚合成员的初始化程序,增加下标或成员顺序[...]

然后我们回到 8.5.4 这个我们开始的地方 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值