Unterschied zwischen In Class initializer und Contructor Initializer List
-
Wo genau besteht der Unterschied?
class First { private: const i = 1; public: };
und
class First { private: const i public: First (int i = 1) : i(i) {}; };
Ich verstehe, dass const Werte, Referenzen und Objekte in einer eventuellen Basisklasse initialisiert werden müssen, bevor der Konstruktorrumpf aufgerufen wird. Das bedeutet, beide Varianten oben sind folgendem vorzuziehen
class First { private: const i public: First (int i_ = 1) { i = i_; } };
Aber den Unterschied zwischen den ersten beiden Möglichkeiten ist mir nicht klar
-
Außer das es eine andere Schreibweise ist gibt es da auch keinen Unterschied. Wobei die erste Variante erst seit C++11 möglich ist und etwas praktischer ist wenn man mehrere Konstruktoren hat, da man die Initialisierung dann nicht wiederholen muss.
-
Versuch mal
First f{7};
mit der ersten Version.
-
ja natürlich hat die erste Klasse da gerade keinen entsprechenden Konstruktor der nen int nimmt, aber das ist doch nen anderes Thema... Es ging mir rein um die Performance oder Funktionalität
-
Unterschied ist die Priorität. Wenn du 99 Konstruktoren mit 1 initialisieren willst und einen mit 2, dann kannst du halt in-class mit 1 initialisieren und den einen mit Initialisierungsliste mit 2.