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.





  • 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 setzen 😉

    mfg,
    C++ Junkie


Anmelden zum Antworten