Ich las dies . Die Antwort von @NPE spricht über interessante historische Fakten & amp; sagt das,
Was ist also der Grund für die Entfernung des overload Schlüsselworts? Ich habe Design and Evolution of C++
nicht von Stroustrup. Was ist falsch mit dem Überladungsschlüsselwort?
Stroustrup erwähnt in D & amp; E 11.2.4 "Das Schlüsselwort overload
", dass das Schlüsselwort overload
Probleme verursacht, wenn zwei Bibliotheken, die beide den gleichen Funktionsnamen (ohne Namespaces *) verwenden, zusammengeführt (oder verwendet) werden. Beispiel: sqrt
im C-Header math.h
im Vergleich zum sqrt(complex)
im Header C ++ complex
. Wenn einer von ihnen die Funktion als überladbar deklarierte, aber der andere nicht, mussten Sie die Header in einer solchen Reihenfolge einfügen, dass die Überladung aktiviert wurde, bevor sie auftrat:
Die möglichen Problemumgehungen sind "in allen außer den einfachsten Fällen nicht handhabbar".
(*) Das Schlüsselwort overload
wurde mit CFront 2.0, das 1989 veröffentlicht wurde, überholt. Namensräume wurden 1993 in den Standardisierungsvorschlag aufgenommen.
Die ursprüngliche Absicht des Keywords war es, mit zwei Ängsten umzugehen:
- Bedenken, dass unentdeckte Unklarheiten auftreten könnten.
- Bedenken, dass ein Programm nicht richtig verknüpft werden konnte, wenn der Programmierer nicht explizit deklarierte, welche Funktionen eigentlich sein sollten überladen.
Die frühere Angst erwies sich als weitgehend unbegründet. Die wenigen Probleme, die bei der tatsächlichen Verwendung auftreten, werden durch die auftragsunabhängigen Überladungsauflösungsregeln behandelt. Die letztere Befürchtung erwies sich als nicht begründet in einem allgemeinen Problem mit C separaten Kompilierungsregeln, die nichts mit Überladung zu tun hatten.
Tags und Links c++ overloading function-overloading