explicit用法explicit关键字作用:禁止隐式调用类的单参数的构造函数。上述实际上由两种情形:1.禁止隐式调用拷贝构造函数2.禁止类对象之间的隐式转换。类对象间的隐式转换:利用一个已经存在的其他类型的对象来创建本类的新对象,且不显示调用本类的构造函数。案例:#includeiostreamusingnamespacestd;classA{public:A(){num=9000;}A(intn){this-num=n;}A(constA&a){num=a.num;}friendvoidshow(constA&);private:intnum;};voidshow(constA&a){couta.num=a.numendl;}intmain(){//隐式调用类A的单参的构造器coutHelloworld!endl;Aa1=5000;//调用隐式转换构造器Aa2=a1;//调用隐式拷贝构造器show(a1);show(a2);show(6000);return0;}上述隐式调用C++语法是允许的,但很多人对这种表示方式不习惯,觉得程序的可读性较差。为了禁止对类的单参数构造器的隐式调用,C++引入关键字explicit。在类的定义中,在任何一个单参数构造器前加explicit,即可以禁止对该构造器的隐式调用。案例:#includeiostreamusingnamespacestd;classA{public:A(){num=0;}explicitA(intn){this-num=n;}explicitA(constA&a){num=a.num;}friendvoidshow(constA&);private:intnum;};voidshow(constA&a){coutvariable:a.numendl;}intmain(){//coutHelloworld!endl;Aa1(32);Aa2(a1);show(a1);show(a2);show(A(6000));return0;}这样程序既可以正常运行,并具有更好的可读性。使用explicit关键字,要注意:1.explicit只需用于单参数的构造器前面。由于无参的构造器和多参数(参数为2个或2个以上)的构造器总是显示调用的,所以在这种构造器前加explicit无意义。2.若想禁止类A对象被隐式转换为类B对象,可在类B中使用explicit,即定义这样的转换构造函数:explicitB(Aa){...},或者explicitB(constA&a){...}