最近看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; }