习题14-51
会优先调用calc(int)
转换的优先级如下:
- 精确匹配
- const 转换。
- 类型提升
- 算术转换
- 类类型转换
习题14-52
ld = si + ld;具有二义性,调用1需将si转换为LongDouble,ld转换为SmallInt。
调用2需要将si转换为LongDouble,ld转换为double。
ld = ld + si;精确匹配LongDouble operator+ (const SmallInt&);
若调用LongDouble operator+(LongDouble&, double);还需将si转换为double。
习题14-53
内置的operator+(int, double)是可行的,而3.14可以转换为int,然后再转换为SmallInt,所以SmallInt的成员operator+也是可行的。两者都需要进行类型转换,所以会产生二义性。改为:
double d = s1 +SmallInt(3.14);即可。