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 mitclass Agemacht 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; };