初始化列表是类中构造函数的一部分,用于实例化类中变量时 赋初值。
需要先了解 构造函数的基本知识。CSDN-构造函数https://mp.csdn.net/mp_blog/creation/editor/124901019
用法在函数头与函数体之间,用一个‘ :’列出变量,变量后用‘()’ 给出实例化该变量时要赋予的初值
用例:
class Date {
public:
Date(int year, int month, int day)
:_year(year), _month(month),_day(day)//初始化列表
{
;
}
private:
int _year;
int _month;
int _day;
};
与在函数体内初始化的区别
初始化列表 实在实例化,也就是为变量开辟空间后,立刻赋予初始值。
类似于
int a=10;//实例化时赋予初始值
而在构造函数体内初始化 ,则是先为变量开辟空间,后赋予值。
类似于
int a;//先为变量开辟空间 a=10;//后赋予值常见的使用场景 1.调用类中 自定义类型成员的构造函数
#includeclass a { public: a(int val,int date) { _val = val; } private: int _val; int _date; }; class A { public: A(int val = 1) :ma(5,4) { _val = val; } int _val; a ma; };
因为 class a没有默认构造函数,需要主动传参,而构造函数只能在实例化对象的时候调用,并且要先实例化成员变量才会进入class A的构造函数体内,所以,只能使用class A的初始化列表来调用class a的构造函数 初始化A的 成员变量ma。
2.类中 const修饰的成员变量#includeclass A { public: A(int val):_val(val){} const int _val; }; int main() { A a (2); std::cout << a._val; return 0; }
具有常属性的变量需要在实例化时赋初值
3.类中 引用类型的成员变量#includeclass A { public: A(int val):_val(val),mval(_val){} const int _val; const int& mval; }; int main() { A a (2); std::cout << a.mval; return 0; }
以上这就是初始化列表非常典型的使用场景。



