explicit关键字是C++中阻止构造函数隐式转换设计的,具体如下
class A{
int a;
A(int a){
this->a=a;
}
}
然后A a1(5);正确 A a2=5;正确
class B{
int b;
explicit A(int b){
this->b=.b;
}
}
然后B b1(5);正确 B b2=5;错误
因为类B的构造函数用exolicit修饰后,就不能隐式转换初始化了,也就是只能使用B b1(5);这种规范的构造对象格式,而后面的B b2=5;这种格式就是错误的,这样使得在只有一个变量时那种不规范的构造格式编译错误
当然其实也可以说不单单是只有一个变量,而是一个无初始参数的“必须变量”,具体如下
class Student{
String name;
int year;
char sex;
Student(String name,int year=0,char sex='m'){
this->name=name;
this->year=year;
this->sex=sex;
}
}
显然 Student s1("Bob",10,'m');正确 Student s2="Bob";正确
上述s2的构造正确是因为这个构造函数列表虽然有3个参数,但是实际中所必须传参的是name这个变量,其余的都是带初值的,所以这种情况也可以用那种不规范的初始化方法,所以这种情况也应该用explicit修饰构造函数,修饰后作用和前面介绍的相同
ui