构造函数只有一个参数的情况下有可能发生隐式转换
class C
{
public:
int m_A;
int m_B;
public:
C(){
cout<<"无参构造"<<endl;
}
C(int a)
{
m_A = a;
cout<<"有参构造 一个参数"<<endl;
}
C(int a, int b):m_A(a),m_B(b)
{
cout<<"有参构造 两个参数"<<endl;
}
};
void test()
{
//有参构造的隐式转换
C ob1=10;//等价于 C ob1(10)
//容易造成 单纯的 =号赋值操作
}
使用explicit修饰构造函数 该构造函数就不会发生隐式转换
class C
{
public:
int m_A;
int m_B;
public:
C(){
cout<<"无参构造"<<endl;
}
explicit C(int a)
{
m_A = a;
cout<<"有参构造 一个参数"<<endl;
}
C(int a, int b):m_A(a),m_B(b)
{
cout<<"有参构造 两个参数"<<endl;
}
};
void test()
{
//有参构造的隐式转换
C ob1=10;//err 因为此处会调用一个参数的构造函数 但是一个参数的构造函数被explicit修饰 调用失败
}
网友评论