explicit关键字是用来修饰类的构造函数的,它的作用是防止隐式转换。在构造函数前加上explicit关键字,表示该构造函数不允许隐式转换,只能显式地调用。

例如:

class A {
public:
    A(int n) { } // 非explicit构造函数
};

void func(A a) { } 

int main() {
    func(10); // 隐式转换
    A a = 10; // 隐式转换
    return 0;
}

在上面的代码中,A类的构造函数没有加上explicit关键字,导致可以进行隐式转换。func函数的参数是A类型,但是可以传入int类型,因为int类型可以隐式转换成A类型。同样的,A类的对象可以用int类型进行初始化,因为int类型可以隐式转换成A类型。

如果将A类的构造函数改成explicit构造函数:

class A {
public:
    explicit A(int n) { } // explicit构造函数
};

void func(A a) { } 

int main() {
    func(10); // 错误,不能进行隐式转换
    A a = 10; // 错误,不能进行隐式转换
    A b(10); // 正确,需要显式调用构造函数
    return 0;
}

在上面的代码中,func函数的参数和A类的对象都不能用int类型进行初始化了,因为int类型不能隐式转换成A类型。只能通过显式调用构造函数来创建A类型的对象。

综上所述,explicit关键字的作用就是禁止隐式转换,只能显式调用构造函数

explicit关键字的解释及用法在构造函数前加explicit有啥作用

原文地址: https://www.cveoy.top/t/topic/dnQe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录