下面的构造函数用于将double类型的值转换为Stonewt类型:
Stonewt(double lbs);
也就是说,可以这样写代码:
Stonewt myCat;
myCat = 19.6;
程序使用构造函数Stonewt(double)来创建一个临时对象,并将19.6作为初始化值。随后,采用逐成员赋值方式将该临时对象的内容复制到myCat中。这一过程称为隐式转换,因为它是自动进行的,而不需要显式强制类型转换。
只有接受一个参数的构造函数才能作为转换函数。下面的函数有两个参数,因此不能用来转换类型:
Stonewt(int stn, double lbs);
然而,如果给第二个参数提供默认值,它便可用于转换int:
Stonewt(int stn, double lbs = 0);
由于这种自动特性并非总是合乎需要的,C++新增了关键字explicit,用于关闭这种自动特性。例如可以声明如下构造函数:
explicit Stonewt(double lbs);
这将关闭隐式转换,但任然允许显式转换,即显式强制类型转换:
Stonewt myCat;
myCat = 19.6; //not valid
mycat = Stone(19.6); //OK, an explicit conversion
注意:只接受一个参数的构造函数定义了从参数类型到类类型的转换。如果使用了关键字explicit限定了这种构造函数,则它只能用于显示转换,否则也可以用于隐式转换。