Frage zur Initialisierungsreihenfolge statischer Objekte



  • Hallo mochmal

    ich habe nun mal wieder eine Frage zur Initialisierung von statischen Datenmembern. Und zwar habe ich 2 structs Vector4 und Matrix4. In Vector4 werden konstante statische Datenmember definiert, die die einzelnen Komponenten des Vectors beschreiben

    const Vector4 Vector4::UnitX = Vector4(1,0,0,0);
    const Vector4 Vector4::UnitY = Vector4(0,1,0,0);
    const Vector4 Vector4::UnitZ = Vector4(0,0,1,0);
    const Vector4 Vector4::UnitW = Vector4(0,0,0,1);
    

    In der definition des Identity Members der Matrix möchte ich nun folgendes machen

    const Matrix4 Matrix4::Identity = Matrix4(Vector4::UnitX,Vector4::UnitY,Vector4::UnitZ,Vector4::UnitW);
    

    Wenn ich dann aber Matrix4::Identity aufrufe, ist die Matrix immer komplett genullt. Liegt das villeicht daran, dass die Member von Vector4 später erzeugt werdn als die der Matrix?

    [Edit] Die Member von Vector4 sind alle richtig belegt und bei Aufruf kommen auch die richtigen Werte zurück.



  • statische member = versteckte globale variable

    Initialisierungsreihenfolge ist dementsprechend nach reihenfolge des Vorkommens, wenn in der gleichen uebersetzungseinheit, ansonsten undefiniert ....

    Kann es sein, das dein Matrix4::Identity ueber eine andere cpp erstmalig referenziert wird als Vector4::UnitX..W ?

    Wenn ja, kannst nicht davon ausgehen, das Matrix4::Identity zuletzt initialisiert wird ....

    brauchst du Matrix4::Identity so oft an vielen verschiedenen stellen ?
    Wenn ja, warum ist es dann losgeloest von Vector4::UnitX..W ?

    Wenn nein, warum machst du dann Matrix4::Identity nicht statisch lokal in einer Funktion (wird erst initialisert wenn man erstmalig die funktion anspringt) ?

    Ciao ....


Anmelden zum Antworten