文章目录
C++11初始化
{}初始化
C++98中{}可以对数组或结构体进行初始化
C++11想要统一初始化方式,试图实现用{}初始化一切对象
{}初始化也称为列表初始化,支持内置类型和自定义类型,自定义类型本质上是类型转换,产生临时对象,优化后变为直接构造
列表初始化可以省去=,而且禁止窄化转换,比如double转为int,保证精度
initializer_list
上面的列表初始化是面向单个对象的,初始化容器时需要对元素逐个调用构造函数
由此推出了initializer_list,容器支持含initializer_list的构造函数,就可以直接对任意个值组成的{}进行初始化,
本质是开一个数组,将数据拷贝过来,initializer_list用两个指针指向数组头尾
cpp
int a{10};//内置类型 省略= 初始化
double b{3.14};
// int c{3.99};//禁止窄化转换,直接报错
int arr[]{1,2,3};//数组初始化
struct Stu
{
int id;
};
Stu s{1001};//结构体初始化
class MyClass
{
public:
MyClass(int x){}
};
MyClass obj{666};//自定义类 列表初始化
map<int,string> my_map{{1,"张三"},{2,"李四"}};//pair对象的{}初始化和map的带参构造结合在一起