built in types und map
-
Hi,
ich habe folgenden code:
int main() { std::map<unsigned int, unsigned int> mymap; std::cout << mymap[2] << std::endl; }Ausgabe: 0
Ich weiß, dass der Aufruf von mymap[2] einen neuen Eintrag in der map erzeugt. Das möchte ich in diesem Fall auch. Was micht jedoch interessiert ist, ob man immer (egal welches System zugrunde liegt) davon ausgehen kann, dass man eine 0 in der Ausgabe bekommt. Wenn ja, warum? Es gibt doch soweit ich weiß, keinen default constructor für built in types, oder liege ich falsch?Grüße
RT
-
RainerT schrieb:
[...]keinen default constructor für built in types, oder liege ich falsch?
Grüße
RTDoch gibt es:
int a = int(); //a == 0
-
Wenn es ein integrierter Typ ist, wird er automatisch mit 0 initialisiert, ist es ein Klassentyp, wird er mit dem Standardkonstruktor initialisiert.
Lg freeG
-
RainerT schrieb:
Ausgabe: 0
Ich weiß, dass der Aufruf von mymap[2] einen neuen Eintrag in der map erzeugt. Das möchte ich in diesem Fall auch. Was micht jedoch interessiert ist, ob man immer (egal welches System zugrunde liegt) davon ausgehen kann, dass man eine 0 in der Ausgabe bekommt.Ja, kann man.
Wenn ja, warum?
Wird dir vom Standard garantiert. Das neue Element wird "value initialized". Im Falle, dass es sich nicht um eine Klasse, Union oder Array handelt, ist "value initialized" = "zero initialized". Und das bedeutet genau das wonach es klingt.
-
Hey, das ging schnell. Danke für die zahlreichen Antworten. Dann kann ich mir ja auch jedes "int ret = 0" durch "int ret;" am anfang meiner Funktionen ersetzen.
Gruß
RT
-
RainerT schrieb:
Hey, das ging schnell. Danke für die zahlreichen Antworten. Dann kann ich mir ja auch jedes "int ret = 0" durch "int ret;" am anfang meiner Funktionen ersetzen.
Gruß
RTNein, das wieder nicht. Nur durch
int ret = int();.
-
Außer es ist eine globale Variable, da kannst du dir es theoretisch sparen, da diese vom Compiler automatisch mit 0 initialisiert werden, jedoch gewöhnt man sich am besten an auch diese mit 0 zu initialisieren, damit man gar nicht erst in Versuchung kommt, die Initialisierung bei lokalen Variablen zu vergessen und so zu einem undefinierten Laufzeitverhalten zu gelangen.
Lg freeG