initialwert von member variablen mit standard-datentyp



  • wuerde mich freuen falls jemand folgendes bestaetigen / widersprechen koennte:

    member variablen einer klasse mit standard-datentypen (int, short, long, char) haben (ohne explizite zuweisung) initial den wert 0.

    stimmt das ?
    danke.
    mfg



  • Nö. Wenn du sie nicht initialisierst, haben sie einen zufälligen Wert.

    class X
    {
    public:
      int i;
    };
    
    int main()
    {
      X x;
      std::cout << x.i;
    }
    

    Automatisch initialisiert werden nur Typen mit Konstruktoren, oder globale oder statische Variablen. char, int, etc. haben dann den Wert 0, ja.
    Warum man das so macht? Ganz einfach:

    while (...)
    {
      char buf[0x1000]; // Uninitialisiert
      memcpy(buf, ...); // Was aber egal ist, da man eh überschreibt.
    }
    

    Wäre das nicht so, hätte man hier quasi ein ständiges memset, was u.U. zu starken Performanceunterschieden führen kann.



  • pepe75 schrieb:

    member variablen einer klasse mit standard-datentypen (int, short, long, char) haben (ohne explizite zuweisung) initial den wert 0.

    stimmt das ?

    Wenn's globale oder static funktionslokale Variablen sind, ja, sonst nein.



  • volkard schrieb:

    pepe75 schrieb:

    member variablen einer klasse mit standard-datentypen (int, short, long, char) haben (ohne explizite zuweisung) initial den wert 0.

    stimmt das ?

    Wenn's globale oder static funktionslokale Variablen sind, ja, sonst nein.

    Eine globale oder static funktionslokale Membervariable. Soso.
    Will sehen 😃



  • hustbaer schrieb:

    volkard schrieb:

    pepe75 schrieb:

    member variablen einer klasse mit standard-datentypen (int, short, long, char) haben (ohne explizite zuweisung) initial den wert 0.

    stimmt das ?

    Wenn's globale oder static funktionslokale Variablen sind, ja, sonst nein.

    Eine globale oder static funktionslokale Membervariable. Soso.
    Will sehen 😃

    https://ideone.com/KJauo#view_edit_box

    Edit: Das ist Schwachsinn.


Anmelden zum Antworten