explicit关键字
c++中的构造函数不仅可以构造和初始化对象,对于单个参数的构造函数,还支持隐式的类型转换。
class Test{
public:
Test(int a= 0 ):_a(a){}
};
int main(){
Test t1 = 100;
return 0;
}
上述代码在语法上,等价于
Test tmp(100); // 构造一个临时对象
Test t1(tmp); // 用临时对象拷贝构造出目标对象
现在的编译器已经对此做出了优化,当遇到上述代码的时候会直接按照Test t1(100)这句代码来进行处理,这也叫做隐式类型转换。但是对于单参数的构造函数来说,上述的构造代码的可读性并不是很好,这里可以使用explicit关键字来禁止单参数构造函数的隐式类型转换。

浙公网安备 33010602011771号