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 ....