隐式类类型转换以及explicit

先有如下构造函数版本:

class Sales_item{

public:

Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}

Sales_item(std::istream &is);

}

原本的成员函数same_isbn()接收一个Sales_item对象作为实参,判断两个对象是否对应的是同一本书。

但是 String null_book="9-99-9999"

item.same_isbn(null_book);也是成立的,因为进行了隐式的类类型转换,使用string类型的null_book(通过默认构造函数)创建了一个临时的对象,然后用该临时对象作为参数传递给same_isbn()函数。

以上这种就成为类类型的隐式转换。可以通过explicit标识来防止进行隐式类类型转换。

class Sales_item{

public:

explicit Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}

explicit Sales_item(std::istream &is);//注意explicit只能出现在类型的申明中,在之后类外进行定义时, explicit关键字不能够再出现。

}

如此一来,item.same_isbn(null_book)将是错误的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值