konw -> int、double -> konw の変換を持つクラスを取得しました。
class konw {
double re, im;
public:
konw() : re(0.0), im(0.0) {}
konw(double r, double i = 0.0) : re(r), im(i) {}
operator int() {return re;}
konw operator+(konw a) {konw wynik; wynik.re = re + a.re; wynik.im = im + a.im; return wynik;}
};
主に、オーバーロードされた operator+ を使用してこれらの変換をテストします
konw zesp(3.1, 0.6);
int ssuma = zesp + 6;
コンパイラは、最後に添付された行の作業中に次のようにバグを報告します。
ambiguous overload for 'operator+' in 'zesp + 6'
私が読んだ限りでは、オーバーロードされた関数を呼び出す方法がいくつかある場合、コンパイラは最短のものを選択します。もちろん、そのような方法は 1 つしかないはずです。operator+ を呼び出す 2 つの方法を見つけることができました。
- 変換変数
zesp
konw -> int と呼び出しoperator+(int, int)
- 変換定数
6
int->double->konw と呼び出しkonw::operator+(konw)
1 番目の方法は 2 番目よりも高速であるため、コンパイラはそれを選択して実行する必要がありますが、代わりにあいまいなオーバーロードに関するバグが記載されています。なんで?私の思考過程のどこが間違っているのでしょうか?