Wie prüfen, ob Variable initialisiert wurde?
-
Nur globale Variablen werden automatisch mit ihrem default-Wert (bei elementaren Datentypen ist das 0) initalisiert.
-
FireFlow schrieb:
Nur globale Variablen werden automatisch mit ihrem default-Wert (bei elementaren Datentypen ist das 0) initalisiert.
laut c++ standard oder nur bei nem bestimmten os?
-
FireFlow schrieb:
Nur globale Variablen werden automatisch mit ihrem default-Wert (bei elementaren Datentypen ist das 0) initalisiert.
aber wenn die lokale variable ein objekt ist, dann wird doch zumindest der default-konstruktor aufgerufen? und objektvariablen werden ja auch immer initialisiert. daß bei objekten initialisiert wird, bei einfachen typen aber nicht, und das auch nur bei lokalen variablen und nicht bei globalen- oder objektvariablen, finde ich irgendwie widersinnig. also ich hab das bisher immer so verstanden, daß alle variablen, global wie lokal, automatisch initialisiert werden.
PS: wo bekomme ich eigentlich die dokumentation des ansi/iso/(wasauchimmer-draft)-c++ her? ich mache c++ noch nicht so lange.
-
http://www.open-std.org/JTC1/SC22/WG21/
http://david.tribble.com/text/cdiffs.htm
http://www.research.att.com/~bs/3rd_compat.pdf
http://www.csci.csusb.edu/dick/c++std/cd2/index.html
-
hab mal Cpt.Tangas links durforstet und bin auf folgendes gestoßen:
2 Variables with automatic storage duration (_basic.stc.auto_) are ini-
tialized each time their declaration-statement is executed. Variables
with automatic storage duration declared in the block are destroyed on
exit from the block (_stmt.jump_).wenn ich das richtig verstehe, dann bedeutet das, daß lokale variablen immer initialisiert werden.
-
int a; cout << a;
Was kommt da raus?
-
FireFlow schrieb:
int a; cout << a;
Was kommt da raus?
kann man nich in foraus sagen
-
Konfusius schrieb:
hab mal Cpt.Tangas links durforstet und bin auf folgendes gestoßen:
2 Variables with automatic storage duration (_basic.stc.auto_) are ini-
tialized each time their declaration-statement is executed. Variables
with automatic storage duration declared in the block are destroyed on
exit from the block (_stmt.jump_).wenn ich das richtig verstehe, dann bedeutet das, daß lokale variablen immer initialisiert werden.
Lies dir durch was Default-Initialisierung für primitive Typen bedeuted und du wirst feststellen, dass solche als lokale Variablen nicht mit einem festen Wert initialisiert werden.
FireFlow schrieb:
int a; cout << a;
Was kommt da raus?
Nasenkobolde. Das Programmstück hat undefiniertes Verhalten. Auf den meisten Platformen wird ein nicht vorhersagbarer Wert herauskommen, der von dem Bitmuster an der Speicherstelle wo a steht abhängig ist. Auf einigen Platformen kann es aber z.B. aber auch zu einer CPU-Exception führen, da dort nicht alle Bitmuster als Integer interpretiert werden dürfen.
-
Ich wollte doch gerade mit meinem Beispiel zeigen dass es undefiniertes Verhalten ist und dass die Variable nicht mit einem bestimmten Wert initilisiert wird...
-
Sowas nennt man Gegenbeweis.
Und der reicht bekanntlich aus, um die ganze Theorie in den Sand zu setzenmfg,
C++ Junkie