std::map - enum default value



  • enum En { Eins, Zwei, Drei };
    std::map<const char*, En> Map;
    

    Wenn ich nun auf ein Element von Map zugreife, dass noch nicht existiert - welchen Wert hat es denn? Ist das geregelt oder undefiniertes Verhalten?

    Allgemeine Frage: Wie legt man den default Wert fuer std::map fest?



  • - der Value wird mit dem Defaultkonstruktor initialisiert. Da dem enum ein integraler Datentyp (int, short, ...) zugrunde liegt, wird er mit 0 initialisiert

    - afaik kann der Defaultwert nur über den Value-Datentyp beeinflusst werden

    - const char* als Key ist ziemlich bescheuert, da der Pointer und nicht der Inhalt des Strings verglichen wird



  • Danke für die Antwort.

    manni66 schrieb:

    - der Value wird mit dem Defaultkonstruktor initialisiert. Da dem enum ein integraler Datentyp (int, short, ...) zugrunde liegt, wird er mit 0 initialisiert

    Wenn ich den enum-Attributen nicht explizit einen Wert zuweise darf ich davon ausgehen, dass die Zählung mit 0 beginnt?

    manni66 schrieb:

    - afaik kann der Defaultwert nur über den Value-Datentyp beeinflusst werden

    Das dachte ich mir fast...

    manni66 schrieb:

    - const char* als Key ist ziemlich bescheuert, da der Pointer und nicht der Inhalt des Strings verglichen wird

    Hatte ich auch nicht vor - möchte hierfür eine eigene Klasse verwenden. Ich wollte das Beispiel nur einfach halten. Aber wo wir trotzdem beim Thema sind... Bei eigenen Variablen ist es klar, dass einfach nur die Pointer verglichen werden und nicht der Inhalt. Aber bei festen Strings, wie Map["String"] .... käme da auch immer ein unterschiedlicher Ergebnis, wenn man das verteilt im Code nutzt oder weist der Compiler dem festen String eine Adresse zu und benutzt dann immer nur die, wenn die Strings gleich sind?



  • MapEnum schrieb:

    Wenn ich den enum-Attributen nicht explizit einen Wert zuweise darf ich davon ausgehen, dass die Zählung mit 0 beginnt?

    Ja

    MapEnum schrieb:

    Aber bei festen Strings, wie Map["String"] .... käme da auch immer ein unterschiedlicher Ergebnis, wenn man das verteilt im Code nutzt oder weist der Compiler dem festen String eine Adresse zu und benutzt dann immer nur die, wenn die Strings gleich sind?

    Das kann der Compiler halten wie er will. Oft wird es wohl funktionieren, aber ich würde mich nicht darauf verlassen.



  • Damit ist mein Problem gelöst, danke. 🙂

    Also bei String-Keys dann wohl besser zu std::string greifen...


Log in to reply