C++——explicit

explicit构造函数是用来防止隐式转换的。请看下面的代码:

class Test1
{
public:
    Test1(int n)
    {
        num=n;
    }//普通构造函数
private:
    int num;
};
class Test2
{
public:
    explicit Test2(int n)
    {
        num=n;
    }//explicit(显式)构造函数
private:
    int num;
};
int main()
{
    Test1 t1=12;//隐式调用其构造函数,成功
    Test2 t2=12;//编译错误,不能隐式调用其构造函数
    Test2 t2(12);//显式调用成功
    return 0;
}

 1.explicit构造函数只能直接初始化

2.可以使用static_cast强制转换

item.combine(static_cast<Sales_data>(cin));

 

posted @ 2018-12-09 20:46  寒江小筑  阅读(236)  评论(0编辑  收藏  举报