Heim >Backend-Entwicklung >C++ >Warum müssen statische Datenelemente außerhalb der Klassendeklaration in C definiert werden?
Auswirkungen statischer Datenelemente auf die Speicherzuweisung
Das IBM C Knowledge Center gibt an, dass die Deklaration eines statischen Datenelements in der Klassenelementliste ist keine Definition und erfordert, dass sie außerhalb der Klassendeklaration im Namespace-Bereich definiert wird. Dies wirft die Frage auf, warum dies notwendig ist und welche schematischen Auswirkungen es auf die Speicherzuweisung hat.
Gemäß der One Definition Rule muss jedes statische Objekt innerhalb eines Programms genau einmal definiert werden. Wenn die Deklaration des statischen Objekts in der Header-Datei eine Definition wäre, würde dies zu mehreren Definitionen über Übersetzungseinheiten hinweg führen, was einen Verstoß gegen die Regel darstellt.
Um dies zu vermeiden, ist die Deklaration in der Header-Datei keine Definition. Stattdessen muss eine einzelne Definition außerhalb der Klassendefinition bereitgestellt werden, typischerweise in der Quelldatei der primären Übersetzungseinheit. Dadurch wird sichergestellt, dass das statische Objekt im gesamten Programm nur einmal definiert wird und dabei die One-Definition-Regel eingehalten wird.
In Bezug auf die Speicherzuweisung werden statische Datenelemente in einem speziellen Speichersegment, den sogenannten statischen Daten, zugewiesen Segment. Sie werden nur einmal beim Programmstart initialisiert und behalten ihre Werte während der gesamten Programmlebensdauer. Dies steht im Gegensatz zu nicht statischen Datenelementen, die beim Erstellen eines Objekts im Stapel oder Heap zugewiesen und bei der Zerstörung des Objekts zerstört werden.
Das obige ist der detaillierte Inhalt vonWarum müssen statische Datenelemente außerhalb der Klassendeklaration in C definiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!