所有单参数的构造函数都必须是explicit的,这是为了防止后台悄悄进行的类型转换,举个例子如下:
定义一个类:
class IntCell
{
public:
explicit IntCell(int intvalue=0):IntValue(intvalue){}
private:
int IntValue;
};
对类做如下实例化:
IntCell obj;
obj=37;
如果不加上explicit关键字的话,这将顺利通过编译,原因是c++通过隐式类型转换,构造了一个临时对象,临时对象的IntValue值是37,
然后再把这个临时对象赋给obj;
如果加上explicit 那么这种情况编译器就匹配不了=两边的类型了 ,就会编译不通过。