QT学习之explicit

来源:互联网 发布:法国外籍军团知乎 编辑:程序博客网 时间:2024/06/05 21:57

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