explicit 的意思是明确的,显式的
该关键字用于类的构造函数前,避免默认的隐式类型转换
class foo{
public:
explicit foo(){}
}
所谓的隐式类型转换是:
class MyString{
public: char *ptr_;
foo(int size){
ptr_ = malloc(size+1);//分配内存空间
memset(ptr_,0,size+1);//填充0
}
}
int main(){
MyString mystr1(5);//正常地调用构造函数,分配5个字符的空间
MyString mystr2 = 5;//同样也可以通过,分配了5个字符的空间
MyString mystr3 = 'a';//也可以通过,分配97个字符的空间,‘a’的ascii码是97,编译器“聪明”地进行了char->int的类型转换
}
这样的隐式转换很好用,但是会造成混淆,所以有时候宁愿禁用掉这种隐式转换,就是使用explicit关键字