Standardwert eines bools in einer map
-
Ich wollte mal fragen, ob ich davon ausgehen darf, dass ein bool in einer std::map auf false steht, wenn ich zum ersten mal mit dem []-operator auf ihn zugreife.
-
Nein, kannst du nicht. Es ist undefiniert welcher Wert dort steht.
-
Wie ist der beste Weg das Verhalten so zu verändern, dass immer false als Standardwert genommen wird?
-
Tobias W schrieb:
Nein, kannst du nicht. Es ist undefiniert welcher Wert dort steht.
Sicher?
Laut Standard bzw. Final Draft ist T& operator[](const key_type& x); das gleiche wie (((insert(make_pair(x, T()))).first)).second*.
http://www.kuzbass.ru:8086/docs/isocpp/lib-containers.html#lib.map.accessEs wird also bool() aufgerufen, was false ergibt (siehe http://www.kuzbass.ru:8086/docs/isocpp/decl.html#dcl.init unter -5-).
@joomoo: wenn ich dich richtig verstanden habe, kannst du also davon ausgehen.
-
Irgendwo im map-Code steht "grob" sowas :
V& operator[] ( const K& key ) { //... deinBool = V(); //... }und = T() bei Built-Ins ist das immer 0, also false für bool's ...
Edit: Verschlafen ....
-
Okay, vielen Dank!
-
Hm, dann hab ich mich kräftig geirrt. Sorry...
Ich hätte mich jetzt einfach nicht drauf verlassen. Ich nehme mal an das joomoo damit überprüfen will ob das Element in der map schon existiert, aber da es damit angelegt wird ist das wohl ein unschöner Weg. Außer du willst natürlich das es angelegt wird...