
回复
C++11新增了列表初始化的概念。
在C++11中可以直接在变量名后面加上初始化列表来进行对象的初始化。
列表初始化也可以用在函数的返回值上
列表初始化的一些规则:
首先说下聚合类型可以进行直接列表初始化,这里需要了解什么是聚合类型:
上述代码类A不是聚合类型,无法进行列表初始化,必须以自定义的构造函数来构造对象。
上面列举了一些不是聚合类的例子,对于一个聚合类型,使用列表初始化相当于对其中的每个元素分别赋值;对于非聚合类型,需要先自定义一个对应的构造函数,此时列表初始化将调用相应的构造函数。
std::initializer_list
我们平时开发使用STL过程中可能发现它的初始化列表可以是任意长度,大家有没有想过它是怎么实现的呢,答案是std::initializer_list,看下面这段示例代码:
我想通过上面这段代码大家可能已经知道STL是如何实现的任意长度初始化了吧,这个std::initializer_list其实也可以作为函数参数。
注意:std::initializer_list<T>,它可以接收任意长度的初始化列表,但是里面必须是相同类型T,或者都可以转换为T。
列表初始化的好处
个人认为列表初始化的好处如下:
什么是类型窄化,列表初始化通过禁止下列转换,对隐式转化加以限制:
示例:
打印如下: