关键字 explicit 在C++中的使用

发布时间 2023-05-23 09:50:41作者: 严_青

在C++中,explicit关键字用于防止类构造函数或类型转换运算符中的隐式类型转换。为了说明explicit关键字的使用,让我们看一个简单的例子:

假设你有一个名为Box的类,它接受一个整数参数来设置其容量:

class Box {
public:
    Box(int capacity) : m_capacity(capacity) {}

private:
    int m_capacity;
};

现在,如果不使用explicit关键字,你可以这样创建一个Box对象:

Box my_box = 5; // 隐式地将整数5转换为Box对象

但是,这可能会导致不易察觉的错误。为了避免此类隐式转换,可以在构造函数前添加explicit关键字:

class Box {
public:
    explicit Box(int capacity) : m_capacity(capacity) {}

private:
    int m_capacity;
};

现在,使用隐式转换将产生编译错误,只能显式地创建Box对象:

Box my_box = 5;      // 编译错误:不能隐式地从'int'转换为'Box'
Box my_box(5);       // 正确:显式地创建Box对象
Box my_box = Box(5); // 正确:显式地创建Box对象

总之,explicit关键字用于禁止类构造函数或类型转换运算符中的隐式转换,从而避免可能的错误。