美文网首页
C++构造函数之explicit

C++构造函数之explicit

作者: 二进制人类 | 来源:发表于2022-10-23 14:16 被阅读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修饰 调用失败
}

相关文章

网友评论

      本文标题:C++构造函数之explicit

      本文链接:https://www.haomeiwen.com/subject/lbfbzrtx.html