C++ explicit 关键字

C++中,被explicit限定的构造函数,在创建对象时不支持隐式类型转换,只能显示转换类型。

隐式转换:什么意思?
就是假如一个操作数是int类型、另一个操作数是double类型,那么会将int类型转换为double类型,再进行运算。

double dTemp = 1;(int类型1转换为double类型dTemp)

显示转换:

double dTemp = (double)1;

1、若没有explicit限定,创建对象时可以使用隐式类型转换:

class Shape
{
public:
    Shape(float r) : Radius(r) {}    //圆--方法1
    Shape(const Shape& shape) : Radius(shape.Radius) {}    //圆--方法2
private:
    float    Radius=1;        
};
int main()
{
    Shape circle_1 = 1.5f;    //调用方法1
    Shape circle_2 = circle_1;    //调用方法2
    Shape circle_3(circle_2);    //调用方法2
    std::cin.get();
}

2、用explicit限定构造方法后:

class Shape
{
public:
    explicit Shape(float r) : Radius(r) {}    //圆--构造方法1
    explicit Shape(const Shape& shape) : Radius(shape.Radius) {}    //圆--构造方法2
private:
    float    Radius=1;        
};
int main()
{
    //错误:此时1.5f无法隐式调用构造方法1
    Shape circle_1 = 1.5f;        //报错
    //同理,因为方法2也不能隐式调用,所以不能直接赋值
    Shape circle_2 = circle_1;    //报错


    //正确:的调用方法
    Shape circle_3(1.5f);        //调用方法1
    Shape circle_4(circle_3);    //调用方法2
    std::cin.get();
}

你可能感兴趣的:(c/c++,c++,开发语言)