Variablen-Initialisierung, Notwendigkeit und Verfahren



  • Ist es notwendig bzw. ist es guter Stil, Variablen immer zu initialisieren?
    Wenn ja, welche Stelle und welche Methode (braces, = ) ist am besten?
    Gibt es diesbezüglich Unterschiede bei Membervariablen oder lokalen Variablen?

    class A {
        int m_value{0};
    };
    
    void function() {
       int value{ 0 };
    }
    

    Oder reicht eine dynamische Initialisierung?

    int a;
    cin>>a; 
    

    Ist auch eine Initialisierungsmethode eine Möglichkeit, die alle Variablen einer Klasse initialisiert?

    void Init(){
      m_var = 0;
    }
    


  • @Mond
    Membervariablen sollte man so früh wie möglich initialisieren, am Besten so, wie du das oben mit class A gemacht hast. Damit ist dein Objekt direkt nach dem Erzeugen initialisiert und in einem wohldefinierten Zustand.
    Bei lokalen Variablen ist es genau andersherum: So spät wie möglich deklarieren und möglichst sofort einen sinnvollen Wert zuweisen.
    Initialisierungsfunktionen sind ab C++11 eigentlich nicht mehr notwendig, da ab C ++ ab C+11 Konstruktordelegation unterstützt. So Sachen wie:

    class A
    {
       ...
    public:
       A()
       {
          Init( ... );
       }
    
       A( SomeParam p )
       {
          Init( ... );
       }
    
       A( SomeOtherParam p )
       {
          Init( ... );
       }
    }
    

    sind heute nicht mehr nötig und sollten möglichst vermieden werden.



  • Mir fehlt noch die Erwähnung der Initialisierungsliste:

    class A
    {
    public:
      A(int param)
        : member{param} // initialisiert member mit parameter wie: "int a{param};"
      {}
    
    private:
      int member;
    };
    

Log in to reply