explicit
阻止不应该允许的经过 转换构造函数 进行的隐式转换的发生
c++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多构造函数),承担两个角色:
1. 构造器
2. 默认且隐含的类型转换操作符
为了防止构造函数被隐式调用,可以用explicit修饰构造函数
例:
class Test1{
private:
int num;
public:
Test1(int num,int num2=1){
this->num=num;
}
};
class Test2{
private:
int num;
public:
explicit Test2(int num){
this->num=num;
}
};
int main()
{
Test1 t1='1';
Test2 t2(11);
return 0;
}
Test1构造函数可以作为转移构造函数,因此再Test1 t1=’1’时会隐式类型转换调用该构造函数,创建对象。
Test2构造函数用explicit修饰,不允许隐式转换,所以只能显示调用