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.


Log in to reply