什么是初始化列表
初始化列表是构造函数初始化的一种方式,以冒号开始,逗号分开需要初始化的成员,每个成员变量后跟一个放在括号中的初始值或表达式
这里以日期类为例演示初始化列表
Date(int year = 1900, int month = 1, int day = 1)
:_year(year)
, _month(month)
, _day(day)
{}
初始化列表的特点
- 每个变量在初始列表只能出现一次,在语法上可以理解为每个成员变量定义初始化的地方
- 无论是否显示写初始化列表,每个构造函数都有初始化列表
- 无论是否在初始化列表初始化,每个成员变量都会走初始化列表
什么情况下必须在初始化列表初始化
- const 成员变量
- 引用成员变量
- 没有默认构造的类类型变量
初始化列表的初始化顺序
初始化列表按照成员变量在类中的声明顺序初始化,与成员在初始化列表出现的顺序无关,
成员变量走初始化列表的逻辑
- 显示在初始化列表成员变量就按初始化的值初始化
- 未显示在初始化列表的成员变量
- 声明位置有缺省值的按缺省值初始化
- 声明位置没有缺省值
- 内置类型成员看编译器,可能是随机值
- 自定义类型成员调用这个成员的默认构造函数
class Date
{
Date(int year = 1900, int month = 1, int day = 1,int x)
:_year(year)
, _month(month)
,_b(x) //引用
,_a(x) //const
,_t; //没有默认构造
{}
private:
int _year;
int _month;
int _day=20; //这里_day没有在初始化列表显示初始化,使用这里的缺省值初始化
const int _a;
int& _b;
Time _t;
};