class member initialisierung



  • unsigned m_width : 32;
    

    was bedeutet das, wenn man in class deklaration schreibt, m_width = 32 ?

    d.h, man kann das member direkt in class initialisieren?


  • Mod

    Ich nehme mal ein, dein Doppelpunkt soll ein Ausrufezeichen sein?

    Das ist eine Initialisierung die dann und genau dann ausgeführt wird, wenn in einer Initialisierungsliste im Konstruktor keine anderslautende Initialisierung stattfindet.

    Dies wurde mit C++11 eingeführt.



  • SeppJ schrieb:

    Ich nehme mal ein, dein Doppelpunkt soll ein Ausrufezeichen sein?

    Ein Ausrufezeichen 😮 ?



  • Das ist eine Initialisierung die dann und genau dann ausgeführt wird, wenn in einer Initialisierungsliste im Konstruktor keine anderslautende Initialisierung stattfindet.

    d.h. es ist auch eine art wertzuweisung

    Ich nehme mal ein, dein Doppelpunkt soll ein Ausrufezeichen sein?

    wie kann das sein?



  • SeppJ schrieb:

    Ich nehme mal ein, dein Doppelpunkt soll ein Ausrufezeichen sein?

    Das ist eine Initialisierung die dann und genau dann ausgeführt wird, wenn in einer Initialisierungsliste im Konstruktor keine anderslautende Initialisierung stattfindet.

    Dies wurde mit C++11 eingeführt.

    Macht man das nicht mit '='? '!' wäre mir neu.

    Ich tippe aber eher darauf, dass es sich hier um Bitfelder handelt.


  • Mod

    Da hatte ich einen Denkaussetzer. Ich wollte Gleichheitszeichen schrieben, aber da haben meine Finger irgendwie etwas anderes getippt.



  • unsigned m_width = 32;
    

    kann auch nicht sein,

    class foo
    {
       protected:
       unsigned m_width = 32; //? lässt compilieren?
    }
    


  • Ich vermute mal es handelt sich um ein bitfield. Aber so außerhalb von jeglichem Kontext kann man das schwer sagen...


  • Mod

    Was hast du denn nun? Es gibt

    class foo{
     unsigned m_width : 32; 	
    };
    

    Das ist das was du geschrieben hast, das ist ein Bitfeld. Und es gibt

    class foo{
     unsigned m_width = 32; 	
    };
    

    Das ist das, wonach du gefragt hast, das ist eine in-class-initialization. Beides ganz verschiedene Konstrukte mit sehr verschiedenen Bedeutungen. Falls letzteres sich nicht compilieren lässt, dann kennt dein Compiler dieses C++11-Feature nicht oder (wahrscheinlicher) du hast dem Compiler nicht gesagt, dass er C++11 benutzen soll.


Anmelden zum Antworten