以以下代码为例,
当构造函数被explicit声明时,表示它们不能被隐式类型转换。
为了避免非预期的类型转换,建议声明为explicit。
class A{
public:
A(); //default构造函数,无参
};
class B{
public:
int num;
bool flag;
B(double t){ //隐式类型转换
num = t;
flag = false;
};
explicit B(double x, bool b){ //显式类型转换
num = x;
flag = true;
};
explicit B(int x=0, bool b=true){ //default构造函数,有参,参数必须都有缺省值
num = x;
flag = b;
};
};
class C{
int num;
explicit C(int x){ //参数无缺省值,不是default构造函数
//显式类型转换
num = x;
};
};