Heim >Backend-Entwicklung >C++ >Wie ist die Initialisierungsreihenfolge nichtstatischer Datenelemente in C?

Wie ist die Initialisierungsreihenfolge nichtstatischer Datenelemente in C?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 10:51:16728Durchsuche

What's the Initialization Order of Non-Static Data Members in C  ?

Initialisierungsreihenfolge nichtstatischer Datenelemente

In diesem Szenario haben wir zwei nichtstatische Datenelemente, a und b, deklariert innerhalb der Klasse X. Es stellt sich häufig die Frage: In welcher Reihenfolge werden diese Datenelemente initialisiert, wenn der Konstruktor für X aufgerufen wird?

Zur Antwort Zur Beantwortung dieser Frage wenden wir uns Abschnitt 12.6.2 des C-Standards zu, in dem die Initialisierungsreihenfolge von Klassenmitgliedern beschrieben wird:

5 Initialization shall proceed in the following order:
-- First, and only for the constructor of the most derived class as described below, virtual base classes shall be initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes...
-- Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list...
-- Then, nonstatic data members shall be initialized in the order they were declared in the class definition...
-- Finally, the body of the constructor is executed...

Basierend auf dieser Regel wird die Reihenfolge der Initialisierung von a und b ausschließlich durch bestimmt ihre Platzierung innerhalb der Klassendefinition. Da a vor b steht, wird es zuerst initialisiert. Dies gilt unabhängig von einer explizit angegebenen Reihenfolge der Elementinitialisierung im Konstruktorkörper.

Daher wird in diesem Fall der Konstruktor von A vor dem Konstruktor von B aufgerufen, wenn der Konstruktor von X aufgerufen wird.

Das obige ist der detaillierte Inhalt vonWie ist die Initialisierungsreihenfolge nichtstatischer Datenelemente in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn