explict的使用

转换构造函数定义了类的隐式转换规则,此构造函数只接受一个实参。可以从该参数类型转换为类类型。

Sales_data(const std::string &s) : bookNo(s), units_sold(0), revenue(0.0) { }
Sales_data::Sales_data(std::istream &is) 
{
	// read will read a transaction from is into this object
	read(is, *this);
}

通过上面两个构造函数,定义了从string类型和istream类型到Sales_data类型的转换。

string null_book = "999";
// 构造一个临时的Sales_data对象
// 对象的其他成员变量都为0,bookNo等于999
item.combine(null_book);
item.combine(cin); // 通过istream构造一个零时对象

为了抑制构造函数定义的隐式转换,可以将构造函数声明为explicit:

explicit Sales_data(const std::string &s) : bookNo(s), units_sold(0), revenue(0.0) { }
explicit Sales_data::Sales_data(std::istream &is);

关键字explicit只对一个实参的构造函数有效。需要多个实参的构造函数不能用于执行隐式转换,所以无需指定。
声明为explicit的构造函数只能用于直接初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值