Reihenfolge Konstruktorliste?



  • Hallo,

    ich habe gerade festgestellt das es eine nunterschied macht wie die privaten member in einer klasse aufgelistet sind wenn ich eine fest vorgegeben konstruktor-initialisierungsliste habe.

    PSEUDOCODE
    Das geht nicht:

    class A
    {
       public:
           A(int member1_, double member2_) : member1(member1_), member2(member2_) {}
        private:
           double member2;
           int memeber1;
    };
    

    das schon:

    class A
    {
       public:
           A(int member1_, double member2_) : member1(member1_), member2(member2_) {}
        private:
           int memeber1;
           double member2;
    };
    

    Warum ist das so? Was ist der Grund?



  • Weil die Datenmember immer in der Reihenfolge initialisiert werden, wie sie in der Klassendefinition deklariert wurden. Und da ist es egal, in welcher Reiehnfolge du deine Elementinitialisierer auflistest.



  • Hmm...was ist ein datenmember und was ein Elementinitialisierer? so richtig versteh ich die antwort nocht nicht....



  • [hab n bissel editiert und einen Tippfehler im Code entfernt]

    anfaenger++ schrieb:

    PSEUDOCODE
    Das geht nicht:

    class A
    {
      public:
        A(int m1, double m2) : member1(m1), member2(m2) {}
      private:
        double member2;
        int member1;
    };
    

    Was geht daran denn nicht?



  • Es gibt Compiler die das anmeckern, so zum Beispiel der gcc. Allerdings nur als warning.


Anmelden zum Antworten