Warum ist type_info :: name () nicht angegeben?

8

Mir ist völlig klar, dass der Rückgabewert von std::type_info::name() implementierungsdefiniert ist.

Aus dem C ++ - Standard (ISO / IEC 14882: 2003 §18.5.1.7):

  

Gibt Folgendes zurück: ein implementierungsdefiniertes NTBS.

Meine Frage ist: warum? Wäre diese Elementfunktion nicht viel nützlicher, wenn der Standard den Rückgabewert vorgibt?

    
Job 25.08.2010, 08:45
quelle

2 Antworten

4

Wenn eine Implementierung beschließt, dass sie RTTI nicht unterstützen können oder wollen, können sie einfach return ""; . Wenn der Standard es gezwungen hätte, etwas zurückzugeben, würden sie möglicherweise jeden fähigen Compiler für eine Umgebung ausschalten, in der die Ressourcen für RTTI nicht existieren oder deaktiviert werden wollen (zum Beispiel ein Mikrochip).

Und vergessen wir nicht, dass wir kein ABI / Name-Mangling-Schema für irgendeinen Compiler erzwingen wollen.

Dies folgt der C ++ - Philosophie "Sie bezahlen nicht für Dinge, die Sie nicht brauchen."

    
GManNickG 25.08.2010, 08:50
quelle
2

Wenn wir über Lieferanten sprechen, die verschiedene Strings zurückgeben, denke ich, dass es nur ein "Wir machen es so, Sie ändern" "Nein, wir machen es so, SIE ändern" zwischen den Compiler-Anbietern. Selbst das Normenkomitee will die Compiler-Teams nicht verärgern, und die Schaffung eines neutralen, neuen Standards, der von keinem Anbieter angewendet wird, neigt dazu, etwas zu finden, das sowieso unsinnig ist.

Warum sind nicht schon alle offensichtlichen Namespaces :: class :: functions usw.? Einige aktuelle Implementierungen haben es in der Vergangenheit als praktisch empfunden, dass sie mit den vom Linker benötigten, verkleinerten Namen übereinstimmen, paranoid waren (oder paranoide Clients hatten), um die Speicherbelegung usw. zu verbessern.

    
Tony Delroy 25.08.2010 08:53
quelle

Tags und Links