最近看C++项目代码的时候发现:explicit关键字
public:
explicit CMaintainManager(CPluginContext* context);
那么explicit关键字到底是什么意思呢?
只能用来修饰类构造函数。
explicit修饰的构造函数不能被隐式调用。
禁止类对象之间的隐式转换。
主要作用是用来声明类构造函数是显示调用的,而非隐式调用,所以只能用于修饰单参构造函数。
因为无参构造函数和多参构造函数本身就是显示调用的。
如果在本身就是显示调用的函数前加上explicit关键字,是没啥意义的。
因为explicit关键字主要用于防止隐式转换的。
下面给出具体实例讲解:
#include <iostream>
using namespace std;
class fan{
public:
//普通的构造函数
fan(int n){
m=n;
}
private:
int m;
};
class ju{
public:
//explicit显式构造函数
explicit ju(int n){
m=n;
}
private:
int m;
};
int main(){
fan f1=519;//隐式调用其构造函数,成功
//ju f2=719;//编译错误,不能隐式调用其构造函数
ju f3(7519);//显式调用成功
return 0;
}