Heim > Backend-Entwicklung > C++ > Warum müssen statische Datenelemente außerhalb der Klassendeklaration in C definiert werden?

Warum müssen statische Datenelemente außerhalb der Klassendeklaration in C definiert werden?

Barbara Streisand
Freigeben: 2024-12-04 21:03:15
Original
776 Leute haben es durchsucht

Why Must Static Data Members Be Defined Outside the Class Declaration in C  ?

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage