构造函数不仅可以构造与初始化对象,对于单个参数的构造函数,还具有类型转换的作用。
class Date
{
public:
Date(int year)
:_year(year)
{}
private:
int _year;
int _month:
int _day;
};
int main()
{
Date d1(2018);
// 用一个整形变量给日期类型对象赋值
// 实际编译器背后会用2019构造一个无名对象,
//最后用无名对象给d1对象进行赋值
Date d2 = 2019;
return 0;
}
为了避免上面的整形可以给日期类型对象赋值的情况,我们需要用到explicit关键字:
class Date
{
public:
explicit Date(int year)
:_year(year)
{}
private:
int _year;
int _month:
int _day;
};
int main()
{
Date d1(2018);
// 用一个整形变量给日期类型对象赋值
// 实际编译器背后会用2019构造一个无名对象,
//最后用无名对象给d1对象进行赋值
Date d2 = 2019;//会报错
return 0;
}
用explicit修饰构造函数,将会禁止单参构造函数的隐式转换。