Konvertierungskonstruktor vs. operator+
-
Wenn ich einen Ausdruck habe, z.B.[cpp]class MyClass
{
MyClass(int);
friend MyClass operator+(const MyClass&, const MyClass&);friend MyClass operator+(const MyClass&, const int&);
};
MyClass myclass;
MyClass temp= myclass +5;[/cpp]Wird dann der definierte KonvertierungsCtor für 5 aufgerufen und danach der operator+(const MyClass&, const MyClass&), oder wird der definierte operator+(const MyClass&, const int&) sofort aufgerufen? Was bevorzugt der Compiler und warum?
Was sollte man fuer solche Ausruecke besser benutzen? Den Konvertierungs Ctor, oder den operator+?
-
Der Compiler sucht nach der Funktion mit der stärksten Übereinstimmung. In dem Fall ist 5 eher ein int-Wert als ein MyClass, daher würde der zweite operator+ gewählt werden.
Grundsätzlich wäre es besser, den operator+ für int-Werte zu definieren (wie geschehen) und den Konstruktor explicit zu machen. Implizite Umwandlungen sind gefährlich und können dir durch Mehrdeutigkeiten und versehentliche Fehler deinerseits (die aber kompiliert werden) später das Leben schwer machen.