Adresse von überladenen Funktionen
Veröffentlicht: Juli 2016
Durch Verwendung eines Funktionsnamens ohne Argumente wird die Adresse dieser Funktion zurückgegeben. Zum Beispiel:
int Func( int i, int j );
int Func( long l );
...
int (*pFunc) ( int, int ) = Func;
Im vorhergehenden Beispiel wird die erste Version von Func ausgewählt, und die entsprechende Adresse wird in pFunc kopiert.
Der Compiler bestimmt, welche Version der Funktion ausgewählt wird, indem er eine Funktion mit einer Argumentliste sucht, die exakt mit der des Ziels übereinstimmt. Die Argumente in den Deklarationen der überladenen Funktionen werden mit Folgendem abgeglichen:
Einem Objekt, das initialisiert wird (wie im vorherigen Beispiel gezeigt)
Der linken Seite einer Zuweisungsanweisung
Einem formalen Argument für eine Funktion
Einem formalen Argument für einen benutzerdefinierten Operator
Einem Funktionsrückgabetyp
Wenn keine genaue Übereinstimmung gefunden wird, ist der Ausdruck für die Adresse der Funktion mehrdeutig, und es wird ein Fehler ausgelöst.
Beachten Sie, dass obwohl im vorherigen Beispiel eine Nichtmemberfunktion, Func, verwendet wurde, die gleichen Regeln angewendet werden, wenn die Adresse von überladenen Memberfunktionen akzeptiert wird.