Heim > Backend-Entwicklung > C++ > Warum muss die Initialisierung statischer Membervariablen in C außerhalb der Klasse erfolgen?

Warum muss die Initialisierung statischer Membervariablen in C außerhalb der Klasse erfolgen?

Mary-Kate Olsen
Freigeben: 2024-12-15 00:39:10
Original
531 Leute haben es durchsucht

Why Must Static Member Variable Initialization in C   Occur Outside the Class?

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
};
Nach dem Login kopieren

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:

  • Const-Integral oder Aufzählungstyp
  • Auswertbar bei Kompilierungszeit

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
};
Nach dem Login kopieren

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!

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