Skip to content

Latest commit

 

History

History
43 lines (26 loc) · 993 Bytes

File metadata and controls

43 lines (26 loc) · 993 Bytes

练习14.52:在下面的加法表达式中分别选用了哪个operator+?列出候选函数、可行函数及为每个可行函数的实参执行的类型转换:

struct LongDouble {
	LongDouble operator+(const SmallInt&);
};

LongDouble operator+(LongDouble&, double);
SmallInt si;
LongDouble ld;
ld = si + ld;
ld = ld + si;

对于ld = si + ld;,都是可行函数,但有二义性。

对于operator+(LongDouble&, double),实参转换路径是:

  • si -> int -> double -> LongDouble

  • ld -> double

对于LongDouble::operator+(const SmallInt&),实参转换路径是:

  • si -> int -> double -> LongDouble

  • ld -> double -> int -> SmallInt

对于ld = ld + si;,都是可行函数,但LongDouble::operator+(const SmallInt&)更佳。

对于operator+(LongDouble&, double),实参转换路径是:

  • ld无需转换

  • si -> int -> double

对于LongDouble::operator+(const SmallInt&),实参转换路径是:

  • ld无需转换

  • si无需转换