Sie werden initialisiert, bevor das Programm startet (d. H. Bevor main
eingegeben wird).
Wenn zwei oder mehr Definitionen (von statischen Daten) in einer einzelnen CPP-Datei vorhanden sind, werden sie in der Reihenfolge initialisiert, in der sie in der Datei definiert sind (die in der Datei definierte/höhere) initialisiert vor dem nächsten ist).
Wenn zwei oder mehr Definitionen (von statischen Daten) in mehr als einer CPP-Datei vorhanden sind, ist die Reihenfolge, in der die CPP-Dateien verarbeitet werden, nicht definiert/implementierungsspezifisch. Dies ist ein Problem, wenn der Konstruktor einer globalen Variablen (die vor dem Start des Programms aufgerufen wurde) auf eine andere globale Variable verweist, die in einer anderen CPP-Datei definiert ist, die möglicherweise noch nicht erstellt wurde. Allerdings Artikel 47 von Effective C Meyers ++ (die den Titel Stellen Sie sicher, dass die globale Objekte initialisiert werden, bevor sie gewohnt sind) nicht beschreibt ein Work-around ...
Definieren Sie eine statische Variable in eine Header-Datei (es ist statisch, so dass Sie mehrere Instanzen ohne den Linker beschwert haben kann)
haben Sie den Konstruktor dieser variablen invoke was auch immer Sie es brauchen (insbesondere die globalen Singletons in den Headern deklariert konstruieren)
... was es sagt, ist eine Technik, die in einigen System-Header-Dateien, z.B. um sicherzustellen, dass die globale Variable cin
initialisiert wird, bevor sie selbst von den Konstruktoren der statischen Variablen verwendet wird.
macht mich froh, dass ich .net Entwicklung jetzt, wo die Antwort ist "kurz bevor Sie sie verwenden". – Massif
Ich würde Ihrer Schlussfolgerung in der Bearbeitung zustimmen. Die einzige Art der Verarbeitung, die gleichzeitig mit der statischen Initialisierung erfolgt, ist eine andere statische Initialisierung. (Natürlich kann das mit anderen Sachen zusammenpassen, die die Implementierung tut, aber nichts, was du schreibst.) –
Wenn du diese Karte spielen willst, dasselbe in C++, außer dass wir nur bezahlen, wenn wir es brauchen. : P – GManNickG