C++构造函数之explicit

2022-10-23  本文已影响0人  二进制人类

构造函数只有一个参数的情况下有可能发生隐式转换

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修饰 调用失败
}
上一篇 下一篇

猜你喜欢

热点阅读