私はC++を学び、C++ Primerを使用しています。エクササイズ14.46以下の点を考慮:私はGCC 4.5上記のプログラムを使用してコンパイルすると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+ ?
、私は
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)のパラメータのCONSTらしさを除去することに気づいた(4)は、曖昧さがない使用して、正確即ち、
LongDouble operator+(LongDouble &, double); // (4)
と一致します。私はここに何かを逃していますかこの問題を解決するために
ありがとうございました。私は 'const'修飾子も解決プロセスで役割を果たすことを知らなかった。 – user803563