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