在C++中,explicit关键字用来修饰类的构造函数,被explicit修饰的类的构造函数,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
explicit使用注意事项:
explicit 关键字只能用于类内部的构造函数声明上。
explicit 关键字作用于单个参数的构造函数。
我们通过下面的例子来理解explicit关键字的使用:
如图,我们创建一个Person对象
在上面的代码中编译器自动将整型转换为Person类对象,实际上等同于下面的操作:
Person temp(10);
Person person = temp;
上面的所有的操作即是所谓的"隐式转换",如果要避免这种自动转换的功能,就需要关键字explicit了,将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit即可,这样就可以防止这种自动的隐式转换操作。
所以如果我们修改上面的MyClass类的构造函数为显式的,那么下面的代码就不能够编译通过了,如下所示,编译器已经报错。
如果改成显示转换,则编译成功。