习题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);即可。
本文详细解析了C++中运算符重载的规则,包括优先级、转换顺序及二义性的解决方法。通过具体实例说明了不同情况下运算符重载的调用过程,帮助读者深入理解C++运算符重载机制。

被折叠的 条评论
为什么被折叠?



