我正在學習C++並使用C++ Primer。考慮下面的練習14.46:C++過載運算符分辨率
class Complex {
Complex(double);
// ...
};
class LongDouble {
friend LongDouble operator+(LongDouble&, int); // (1)
public:
LongDouble(int);
operator double();
LongDouble operator+(const Complex &); // (2)
// ...
};
LongDouble operator+(const LongDouble &, double); // (3)
LongDouble ld(16.08);
double res = ld + 15.05; // which operator+ ?
當我編譯使用gcc 4.5上面的程序,我得到
14_46.cpp:60:21: error: ambiguous overload for ‘operator+’ in ‘ld + 1.5050000000000000710542735760100185871124267578125e+1’
14_46.cpp:60:21: note: candidates are: operator+(double, double) <built-in>
14_46.cpp:35:5: note: LongDouble LongDouble::operator+(const Complex&)
14_46.cpp:45:1: note: LongDouble operator+(const LongDouble&, double)
14_46.cpp:17:5: note: LongDouble operator+(LongDouble&, int)
爲什麼(3)沒有選擇?不完全匹配嗎?
然而,我注意到,除去參數的常量性(3)完全匹配,即,
LongDouble operator+(LongDouble &, double); // (4)
使用(4)沒有歧義。我在這裏錯過了什麼嗎?
謝謝。我不知道'const'限定詞在解析過程中也起了一定的作用。 – user803563