单个参数的构造函数很容易就被隐形转化了类型,用explicit可以防止这种隐形转化。请看如下例子:
class COneClass
{
int a;
public:
explicit COneClass(int i):a(i){}
};
int main()
{
COneClass clsA(1),clsB(2);
clsA = clsB;
clsA = 2; //错误,不能隐式转换
return 0;
}
int a;
public:
explicit COneClass(int i):a(i){}
};
int main()
{
COneClass clsA(1),clsB(2);
clsA = clsB;
clsA = 2; //错误,不能隐式转换
return 0;
}