C++中关键字explicit的作用
最近学习Qt经常会遇到explicit关键字,那么简单的说一下吧。
在C++中,如果一个类中只有一个参数的构造函数,C++允许一种特殊的声明变量的方式。在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据转换为类的对象。如果在构造函数参数类型的数据转换为类的对象。如果在构造函数前加上explicit修饰词,则会禁止这种自动转换。在这种情况下,即将对英语构造函数的参数类型的数据直接赋值给类变量,编译器也会报错。
例如,下面将举个例子
class Students
{
public:
float GPA;
explicit Students(float gpa);
{
GPA=gpa;
}
};
void fun(void)
{
Students s1(4.0);
Students *s2 = new Students(3.8);
Students s3 = 3.2;
}
这段 C++ 程序定义了一个类Students ,包含一个构造函数, 这个构造函数只包含一个浮点型参数GPA ,可用于在构造类时初始化GPA变量。
然后定义了一个函数fun,在这个函数中我们用三种方式分别创建了三个学生。
注意第三种的特殊性。C/C++是一种强类型语言,不同的数据类型是不能随意转换的,如果要进行类型转换,必须进行显式强制类型转换(转换构造函数)。但是第三种构造方式确实是可行的,这就是explicit表达式的意义所在。
网友评论