Heim >Backend-Entwicklung >C++ >Warum werden statische C-Membervariablen außerhalb der Klassendefinition initialisiert?
Initialisierung statischer Mitgliedsvariablen in C
In C werden statische Mitgliedsvariablen außerhalb der Klassendefinition initialisiert. Diese Entwurfswahl hat Fragen hinsichtlich ihrer logischen Begründung und möglichen Auswirkungen auf das Erbe aufgeworfen.
Grund für die externe Initialisierung
Statische Elemente müssen in genau einer Übersetzungseinheit definiert werden, um eingehalten zu werden die Ein-Definition-Regel. Wenn die Initialisierung innerhalb der Klasse zulässig wäre, könnten mehrere Definitionen in verschiedenen Übersetzungseinheiten entstehen, in denen die Header-Datei enthalten ist.
Beispiel
Bedenken Sie den folgenden Codeausschnitt:
struct Gizmo { static string name = "Foo"; };
Wenn der Name innerhalb der Klasse initialisiert werden würde, würde er in jeder Übersetzungseinheit definiert, die die Header-Datei enthält. Dies würde gegen die One-Definition-Regel verstoßen.
Integrierte statische Mitglieder
C ermöglicht die Initialisierung integraler statischer Mitglieder innerhalb der Deklaration. Allerdings ist immer noch eine externe Definition innerhalb einer einzelnen Übersetzungseinheit erforderlich, um die Ein-Definition-Regel zu erfüllen. Dies dient als syntaktische Abkürzung:
struct Gizmo { static const int count = 42; };
Solange der bei der Initialisierung verwendete Ausdruck vom Typ const integral oder enumeration ist, zur Kompilierungszeit ausgewertet werden kann und eine Definition in einer einzelnen Übersetzungseinheit vorhanden ist, Dieser Ansatz ist gültig. Zum Beispiel:
gizmo.cpp
#include "gizmo.h" const int Gizmo::count;
Das obige ist der detaillierte Inhalt vonWarum werden statische C-Membervariablen außerhalb der Klassendefinition initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!