Overload resolution
-
Hallo,
ich verstehe gerade die overload resolution nicht:
void f(double, int, int){} void f(int, double, double){} void g(int, int, double){} void g(int, double, double){} void h(int, int, double){} void h(int, double, int){} int main() { f(1,2,3); // ambiguous g(1,2,3); // g(int, int, double) h(1,2,3); // ambiguous }
Meine Frage: Warum ist f ambiguous?
Wenn es um die Anzahl der perfect-matches geht, dann müsste f(double, int, int) gewinnen. Wenn "von links nach rechts" ausgewertet wird, dann dürfte h nicht ambiguous sein, sondern h(int, int, double) müsste gewinnen.
Welche Regel sorgt dafür, dass f ambiguous ist?
-
Wenn es um die Anzahl der perfect-matches geht, dann müsste f(double, int, int) gewinnen. Wenn "von links nach rechts" ausgewertet wird, dann dürfte h nicht ambiguous sein, sondern h(int, int, double) müsste gewinnen.
Weder noch. Damit eindeutig aufgeloest werden kann, muss eine Ueberladung fuer jeden Parameter mindestens genauso passend sein wie die andere.
-
Schau mal hier:
https://en.cppreference.com/w/cpp/language/overload_resolutionunter "Best viable function:
F1 is determined to be a better function than F2 if implicit conversions for all arguments of F1 are not worse than the implicit conversions for all arguments of F2, and
- there is at least one argument of F1 whose implicit conversion is better than the corresponding implicit conversion for that argument of F2
Also: keine Konvertierung darf schlechter sein, aber mindestens eine muss besser sein, damit eine Funktion besser als die andere ist.
-
Guten morgen...! Das war ja doch recht einfach!
Danke schön!