前言
大家好吖,欢迎来到 YY 滴C++11系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
目录
一.探究std::initializer_list是什么?
我们观察下面代码:
- 根据输出结果“the type of il is an initializer_list”,我们可以知道 initializer_list是作为参数的构造函数
int main()
{
auto il = { 10, 20, 30 };
cout << typeid(il).name() << endl; 输出结果:the type of il is an initializer_list
return 0;
}
二.std::initializer_list使用场景(初始化容器对象,作为operator=的参数…)
- std::initializer_list一般是作为构造函数的参数
- C++11对STL中的不少容器 (vector,list,map…) 就 增加std::initializer_list作为参数的构造函数 ,这样初始化容器对象就更方便了
- std::initializer_list也可以作为operator=的参数 ,这样就可以用大括号赋值
三.对比【C++11特性{ }的隐式类型转换】&【调用initializer_list的vector构造函数】不同原理
- C++11中新增的关于{}用法 (传送门):具体对象是下面代码中Point, 直接调用两个参数的构造 – 隐式类型转换
- 我们vector容器构造函数的参数是std::initializer_list, 这里是调用initializer_list的vector构造函数
struct Point
{
//explicit Point(int x, int y)//调用后,可不让其隐式类型转换
Point(int x, int y)
:_x(x)
,_y(y)
{
cout << "Point(int x, int y)" << endl;
}
int _x;
int _y;
};
int main()
{ // 不同的规则
vector<int> v1 = { 1,2,3,4,3}; // 调用initializer_list的vector构造函数
Point p1 = { 1,1}; // 直接调用两个参数的构造 -- 隐式类型转换
return 0;
}