explicit关键字的作用是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换。
假如没有explicit:
class myclassA;
class myclassB
{
myclassB(myclassA& para1, int ¶2);
};
myclassA obj1;
myclassB obj2;
obj2=obj1;
实际上发生如下隐式转换:
myclassB tmp(obj1);
myclassB obj2=tmp;
为避免这种隐式转换,在构造函数前加上explicit之后:
class myclassA;
class myclassB
{
explicit myclassB(myclassA& para1, int ¶2);
};
下面代码就无法编译通过:
myclassA obj1;
myclassB obj2;
obj2=obj1;