c++中的explicit 关键字是什么意思

2025-01-03 18:45:59
推荐回答(3个)
回答1:

用explicit关键字标示一个构造函数的话,就说明这个类的对象不允许在函数的参数传递过程中用调用这类构造函数。(因为编译器默认的是会调用这样的构造函数的)

比如:
class A{
public:
A(int tar){

}

};
void tar_func(A a){

}
然后在main函数中有:
int main(){
tar_func(100); //这里参数是一个整形,会调用A的构造函数,并生成一个A类的对象

return 0;

}

如果构造函数前面加了explict那么这种main函数中的调用方法就是错误的了。

回答2:

关键字explicit可以禁止“单参数构造函数”被用于自动类型转换
class Stack
{
explicit Stack(int size);
};
没有explicit的话Stack s = 40;能编译通过
而有explicit则不能,必需Stack s(40);

回答3:

阻止隐式转换的发生
例如
class A
{
.....
};
class B
{
...
explicit B(A a);
};
假如使用 B==A时,由于A B是不同的类,所以要比较时如果B类没有重载==
如果B(A a)没有explicit,A会转换为B再比较,假如有explicit,A不会转换为B,没有重载==的情况下则无法比较,编译报错