Statische Mitgliedsvariablen in C: Initialisierung außerhalb der Klasse
Obwohl es kontraintuitiv erscheinen mag, erfolgt die Initialisierung statischer Mitgliedsvariablen in C außerhalb die Klasse aus mehreren logischen Gründen.
Ein-Definition-Regel Compliance
Statische Mitglieder müssen in genau einer Übersetzungseinheit definiert werden und dabei der One-Definition-Regel entsprechen. Wenn die Initialisierung innerhalb der Klasse zulässig wäre, würde dies zu mehreren Definitionen derselben Variablen in unterschiedlichen Übersetzungseinheiten führen und damit gegen diese Regel verstoßen.
Beispiel:
Bedenken Sie Folgendes Codeausschnitt:
struct Gizmo { static string name = "Foo"; // Not allowed };
Wenn diese Initialisierung zulässig wäre, würde der Variablenname in jeder Übersetzungseinheit definiert werden, die die Header-Datei enthält. Dies verstößt gegen die One-Definition-Regel.
Zulassen der Initialisierung innerhalb der Klasse
Das Zulassen der Initialisierung innerhalb der Klasse mag zwar intuitiver erscheinen, es wäre jedoch dennoch eine separate Definition erforderlich, um dies sicherzustellen dass die One-Definition-Regel durchgesetzt wird. Daher würde das Zulassen einer In-Class-Initialisierung nur die Syntax hinzufügen, ohne einen wirklichen Vorteil zu bieten.
Alternative für Integralwerte
Für integrale statische Elemente ermöglicht C die Initialisierung innerhalb der Deklaration wenn der Ausdruck ist:
Dies ermöglicht eine syntaktische Verknüpfung, die es einfacher macht, integrale statische Elemente mit einer einzigen Codezeile zu definieren. Allerdings ist weiterhin eine Definition in einer separaten Übersetzungseinheit erforderlich.
Beispiel:
struct Gizmo { static const int count = 42; // Allowed };
In diesem Fall generiert der Compiler die notwendige Definition außerhalb der Klasse Halten Sie sich an die One-Definition-Regel.
Das obige ist der detaillierte Inhalt vonWarum muss die Initialisierung statischer Membervariablen in C außerhalb der Klasse erfolgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!