C++类隐式转换和显式转换

下面的构造函数用于将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限定了这种构造函数,则它只能用于显示转换,否则也可以用于隐式转换。

猜你喜欢

转载自www.cnblogs.com/ticonci/p/12455661.html