Überladen von C ++ Typecasting (Funktionen)

8

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)

    
iammilind 12.05.2011, 07:57
quelle

3 Antworten

2
  

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:

%Vor%

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.

    
sbi 12.05.2011, 08:26
quelle
2

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?

    
Simone 12.05.2011 08:06
quelle
1

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:)

    
log0 12.05.2011 12:56
quelle

Tags und Links