explicit关键字的解释及用法在构造函数前加explicit有啥作用
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关键字的作用就是禁止隐式转换,只能显式调用构造函数
原文地址: https://www.cveoy.top/t/topic/dnQe 著作权归作者所有。请勿转载和采集!