std::map, was macht der default ctor bei intrisic typen?



  • Hallo,

    wenn ich eine std::map<int, unsigned> foo habe und foo[7] aufrufe, was passiert dann? Die doku sagt wenn 7 als key nicht existiert, wird der Value Type mittels default ctor erzeugt. Kann man sich darauf verlassen dass im Release die intrinsic typen wie unsigned, int, double usw zu 0 initialisiert werden?

    Wenn nein, dann muss eine einfache

    getX(int i) {return foo[i];}
    

    ja mächtig umständig gebaut werden, mit nem find auf den key, wenn find gleich ende dann manuell ein KeyValue Pair mit (i,0) erzeugen? Oder alternativ den int in einer Klasse kapseln, die beim default ctor das Ding auf 0 setzt?



  • Ja, das Objekt wird dann per Default-Konstruktor angelegt. Bei Basistypen wie int, double, Pointer etc ist dies immer 0.

    Musst dabei aber bedenken das das Objekt dann da ist und bei jeder späteren Iteration durch die Map wieder auftaucht. find hat den Vorteil das es nichts erzeugt.



  • Seikilos schrieb:

    Kann man sich darauf verlassen dass im Release die intrinsic typen wie unsigned, int, double usw zu 0 initialisiert werden?

    Wenn du mit intrinsic die builtin Typen meinst ja 🙂 (Das Wort "intrinsic" taucht im Standard nirgendwo auf...)



  • Danke für die Info.
    Ich kenne build-in und intrinsic. Sorry für den falschen Begriff.

    Mir kommt die default initialisierung bei nicht existierenden Typen da sehr gelegen, von daher ist es gut, dass die angelegt werden.

    Danke 🙂


Log in to reply