微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐