explicit关键字
explicit关键字
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数只能显式调用, 而不能充当转换构造函数(当构造函数只有一个参数或其他参数都有缺省值时)。 跟它相对应的另一个关键字是implicit,。类构造函数默认情况下即声明为implicit。
为何尽量对单参数构造函数使用explicit?
1
2
3
4
5
6
7
8
9
10
11
12
13 class A{
public:
A(int x){
cout<<"我被用了"<<endl;
}
};
void func(A a){}
int main( ){
func(1);// 被隐式转换为func(A(1)) ,本来是1却被自动调用了A(1)这就是拷贝初始化
//输出:"我被调用了"
return 0;
}而实际上,func(1)可能只是操作失误。
什么时候下,构造函数可以充当转换构造函数?
- 当构造函数只有一个参数且没有
explict
关键字修饰时。- 当构造函数有多个参数且除第一个参数外其他参数都有默认值(第一个参数也可以有)时。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极简!
评论