C ++ - Stylecasts (alle 4) sehen genau wie einige Funktionsvorlagen aus. z.B.
%Vor%wird als
verwendet %Vor% Warum ist es nicht erlaubt, sie zu überlasten nach Sprachstandard für benutzerdefinierte Verwendung? (wir können die Keywords wie new/delete
oder andere operators
überladen)
Warum ist es nicht erlaubt, sie nach Sprachstandard für benutzerdefinierte Verwendung zu überladen?
Ich nehme an, das liegt daran, dass das Standardkomitee bei der Einführung dieser die Semantik aller vier dieser Abgüsse für gut definiert hielt und auf alle Typen anwendbar war, die sie sein sollten. Und meistens ist das wahr.
Das einzige Gegenbeispiel, das ich kenne, ist die Unfähigkeit zu dynamic_cast
zwischen intelligenten Zeigerinstanzen:
Ich nehme an, die Fähigkeit, das zu tun, hätte einige Vorteile.
Ich weiß nicht, ob das von den Freiwilligen diskutiert wurde, die die ganze Arbeit im Normenausschuss gemacht haben (und ich bin zu faul, um zu googeln), aber wenn es diskutiert wurde (und ich denke schon) Es wurde abgelehnt, entweder weil jemand dachte, dass die Nachteile die Vorteile überwiegen, oder weil niemand die Zeit gefunden hat, um einen anständigen Vorschlag zu machen und ihn durchzubringen. 1
1 Lach nicht. Es gibt tatsächlich eine Menge Dinge, die den meisten zustimmen würden, und die nur versagen, weil niemand sich darum kümmern könnte, einen anständigen Vorschlag zu schreiben und die Zeit zu investieren, die benötigt wird, um darüber zu diskutieren und sie iterativ zu verbessern kann über abgestimmt werden.
Ich denke, der Grund ist der gleiche, denn Sie können das Schlüsselwort Sprache nicht überladen.
Tatsächlich müssen Sie sie als Sprachschlüsselwort und nicht als Vorlagenfunktion sehen, selbst wenn genau so aussieht . OTOH, ich konnte mir nicht vorstellen, welche Art von Katastrophen man tun könnte, wenn man die Bedeutung dieses bestimmten C ++ - Aspekts ändert.
BEARBEITEN
Ich war mir ziemlich sicher, dass jemand auf die Frage gekommen wäre: "Warum können Sie dann new
/ delete
?" Überladen. Ich denke, dass die Anpassung der Speicherzuweisung / -zuordnung in bestimmten Szenarien erforderlich ist, und dass die Vorteile einer Überlastung die Risiken überwiegen. Ich sehe keinen Vorteil darin, das C ++ - System zu untergraben, IOW Ich denke nicht an ein Szenario, in dem es nützlich wäre. Hast du?
Die Zeigerkonvertierung mit dynamic_cast
, reinterpret_cast
und static_cast
hat wohldefinierte Bedeutungen und es ist wahrscheinlich besser, keine Überladung zuzulassen.
Es wäre ein Schmerz, Benutzern zu erlauben, die Bedeutung von const_cast
zu ändern.
Nur Objekttyp Casting bleibt.
%Vor%dann
%Vor%Hoffentlich haben Sie bessere Anwendungsfälle als meins:)
Tags und Links c++ casting overloading