C++Primer14.9.3节练习

练习14.52:

对于表达式:ld = si + ld

由于LongDouble不能相互转换为SamllInt,SmallInt也不能转换为LongDouble,可以将两个类型都转为算术类型,然后使用内置转换

候选函数为内置转换double->int,float->int,int->float,int>double以及LongDouble类的operator double(),operator float(),SmallInt类的operator int()const

可以使用double(float)转为int,然后两个int相加,也可以int转为double(float),两个double(float)相加,可以匹配的内置转换太多,产生二义性,无可行函数

对于表达式:ld = ld + si

同样,LongDouble不能相互转换为SamllInt,SmallInt也不能转换为LongDouble此处也可以使用内置转换后相加,但不是最佳匹配

候选函数为内置转换double->int,float->int,int->float,int>double以及LongDouble类的operator double(),operator float(),SmallInt类的operator int()const,非成员函数LongDouble operator+(LongDouble&,double)

最佳匹配为非成员函数LongDouble operator+(LongDouble&,double),左边为LongDouble类型的ld引用,右边为SmallInt转换为int再经内置转换为double

练习14.53:

可以使用SmallInt的友元函数SmallInt operator+(const SmallInt& ,const  SmallInt&),将3.14转换为int,然后再将int转换为SmallInt,相加。也可以先将SmallInt转换为int,再使用内置类型将int转化为double,产生二义性

改正:double d = s1 + SmallInt(3.14);此时使用SmallInt的友元函数SmallInt operator+(const SmallInt& ,const  SmallInt&)为最佳匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学C++.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值