Warum wurde das Überladungsschlüsselwort aus C ++ entfernt?

8

Ich las dies . Die Antwort von @NPE spricht über interessante historische Fakten & amp; sagt das,

  • Früher war in C ++ ein spezielles Schlüsselwort (overload) vorhanden verwendet werden, um einen Bezeichner als überladen zu deklarieren;

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?

    
Destructor 26.06.2015, 07:03
quelle

1 Antwort

9

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:

%Vor%

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:

  
  1. Bedenken, dass unentdeckte Unklarheiten auftreten könnten.
  2.   
  3. Bedenken, dass ein Programm nicht richtig verknüpft werden konnte, wenn der Programmierer nicht explizit deklarierte, welche Funktionen eigentlich sein sollten   überladen.
  4.   

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.

    
dyp 26.06.2015, 07:16
quelle