C++学习笔记之初始化列表.docx
第
C++学习笔记之初始化列表
目录一、用初始化列表初始化对象1.初始化列表用法2.初始化列表特性二、explicit关键字1.内置类型的隐式转换2.如何避免单参构造函数初始化发生隐式类型转换三、匿名对象1.匿名对象定义2.匿名对象应用场景总结创建一个类对象时,编译器通过调用构造函数,给类对象中各个成员变量赋初值:
classDate
public:
//构造函数
Date(intyear=2025,intmonth=4,intday=19)
_year=year;
_month=month;
_day=day;
private:
int_year;
int_month;
int_day;
};
但上述赋初值不能称作类对象成员的初始化,因为构造函数体内可以多次赋值:
classDate
public:
//构造函数
Date(intyear=2025,intmonth=4,intday=19)
_year=year;
_month=month;
_day=day;
_year=2025;//构造函数体内允许对成员变量进行多次赋值
private:
int_year;
int_month;
int_day;
};
而初始化列表能只能初始化一次。
一、用初始化列表初始化对象
1.初始化列表用法
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式。
classDate
public:
//构造函数
Date(intyear=2025,intmonth=4,intday=19)
:_year(year)//初始化列表初始化
,_month(month)
,_day(day)
private:
int_year;
int_month;
int_day;
};
2.初始化列表特性
(1)初始化列表能只能初始化一次,多次初始化会报错:
classDate
public:
//构造函数
Date(intyear=2025,intmonth=4,intday=19)
:_year(year)
,_month(month)
,_day(day)
,_month(month)//初始化列表多次初始化
private:
int_year;
int_month;
int_day;
};
编译器也允许构造函数赋初值和初始化列表初始化混用:
classDate
public:
//构造函数
Date(intyear=2025,intmonth=4,intday=19)
:_year(year)//两者混用
,_month(month)
_day=day;
private:
int_year;
int_month;
int_day;
};
混用时初始化列表初始化和构造函数赋初值不冲突:
classDate
public:
//构造函数
Date(intyear=2025,intmonth=4,intday=19)
:_year(year)//两者不冲突
,_month(month)
_day=day;
_year=2025;
private:
int_year;
int_month;
int_day;
};
但混用时初始化列表初始化还是要遵循只能初始化一次成员变量的原则:
classDate
public:
//构造函数
Date(intyear=2025,intmonth=4,intday=19)
:_year(year)//初始化列表初始化
,_month(month)
,_year(2025)//_year在初始化列表里被初始化了两次,不允许
_day=day;
private:
int_year;
int_month;
int_day;
};
(2)const成员变量、引用成员变量、没有默认构造函数的自定义类型成员只能在初始化列表初始化。
①