2016-06-20 3 views
0

Die Dokumentation besagt, dass:MSVC Wie funktioniert ios_base :: Init?

Die verschachtelte Klasse ein Objekt, deren Konstruktion beschreibt sorgt dafür, dass der Standard iostreams Objekte richtig konstruiert sind, noch bevor die Ausführung eines Konstruktor für ein beliebiges statisches Objekt.

Zum gesehen:

https://msdn.microsoft.com/en-gb/library/fbyc90zw.aspx

Aber da statischen Objekten einen undefiniertes haben init Bestellung wie ios_base::Init, dass es sie vor läuft nicht gewährleistet?

Antwort

0

Ich würde riskieren, dass die Reihenfolge der Initialisierung von statischen Variablen nicht definiert ist, aber die Reihenfolge der Konstruktoraufrufe für die Erstellung eines Objekts/Variable (statisch oder nicht) ist gut definiert.

+0

Aber müsste es nicht eine statische Instanz von ios_base :: Init geben? – paulm

+0

@paulm Ja. Aber vielleicht wollten Sie das nicht hören. Können Sie Ihre Frage näher ausführen? – Kashyap

+0

In welcher Weise? Ich möchte wissen, wie ios_base :: Init ctor immer vor ios_base ctor laufen kann? – paulm

0

Die Klasse ios_base::Init ist in der Klasse ios_base verschachtelt. Wenn also eine ios_base Instanz erstellt wird, wird auch der ios_base::Init-Konstruktor ausgeführt.

Es spielt keine Rolle, welche der möglichen statischen Instanzen eines Objekts mit ios_base existieren oder in welcher Reihenfolge in sie laufen. Alles, was zählt, ist die ios_base::Init zunächst die Standard-Streams laufen und initialisieren wird (alle anderen Konstruktor ruft ios_base::Init wahrscheinlich nichts tun, da die Arbeit bereits durch den ersten Aufruf des Konstruktors erledigt wurde).

+0

Bedeutet dies, dass es nur ein "normales" Mitglied von ios_base ist? ZB Klasse foo {class bar {}; bar mBar; }; ? – paulm

+0

In VS2015 können Sie die Definition davon in der 'xiosbase'-Kopfzeile der C++ - Bibliothek sehen. –

+0

Es scheint, _Init_ctor und _Init_dtor zu umbrechen, aber das zeigt nicht, was das tut oder wie die Init-Klasse erstellt wird, da es kein Mitglied von ios_base ist – paulm