在C++中,如果一个类的构造函数只有一个形参,在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据转换为类的对象,这是一种隐式类型转换。如果在构造函数前加上explicit修饰词,表明该构造函数是显式(explicit)的,则会禁止这种自动转换,在这种情况下,即使将对应于构造函数参数类型的数据直接赋值给类变量,编译器也会报错。这种方法是在编译时加上限制条件,在编译时就能发现不该有的类型转换。
三个要点:
(1)explicit 关键字只能用于类内部的构造函数声明上。
(2)explicit 关键字作用于一个参数的构造函数。
(3)在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换。