explicit的用法
用于类构造函数中,构造函数只有一个参数或者除了第一个参数其他有默认参数时,避免进行隐性参数传递,进行显示传递参数。
看一下,未使用explicit时,函数的输出
#include<iostream>
using namespace std;
class person{
public:
person(int a):year(a){
cout<<"构成成功"<<endl;
}
int year;
};
int main(){
person xiao=10;
return 0;
}
下面的是带有explicit运行时
#include<iostream>
using namespace std;
class person{
public:
explicit person(int a):year(a){
cout<<"构造成功"<<endl;
}
int year;
};
int main(){
person xiao=10;
return 0;
}
关键字explicit进行了防止该类的对象直接被对应内置类型隐式转化后赋值,从而规定这个构造函数必须被明确调用。
正确写法应该是:
#include<iostream>
using namespace std;
class person{
public:
explicit person(int a):year(a){
cout<<"构造成功"<<endl;
}
int year;
};
int main(){
person xiao(10);
return 0;
}