Heim > Backend-Entwicklung > C++ > Warum sollten statische C-Membervariablen außerhalb der Klassendeklaration initialisiert werden?

Warum sollten statische C-Membervariablen außerhalb der Klassendeklaration initialisiert werden?

Barbara Streisand
Freigeben: 2024-12-25 15:11:21
Original
831 Leute haben es durchsucht

Why Initialize C   Static Member Variables Outside the Class Declaration?

Initialisierung statischer Mitgliedsvariablen in C: Warum außerhalb der Klasse?

In C werden statische Mitgliedsvariablen außerhalb der Klassendeklaration initialisiert. Diese Abweichung von der intuitiveren In-Class-Initialisierung hat bei Entwicklern Neugier geweckt. Gibt es einen logischen Grund für diese Entwurfsentscheidung?

Der grundlegende Grund liegt in der Anforderung, dass statische Elemente in genau einer Übersetzungseinheit definiert werden müssen. Wenn die Initialisierung innerhalb der Klasse zulässig wäre, könnte dies zu mehreren Definitionen derselben Variablen in verschiedenen Übersetzungseinheiten führen, was einen Verstoß gegen die Ein-Definition-Regel darstellt.

Um dies zu veranschaulichen, betrachten Sie das folgende Beispiel:

struct Gizmo {
  static string name = "Foo";
};
Nach dem Login kopieren

Wenn dieser Code zulässig wäre, würde der Name in jeder Übersetzungseinheit definiert, die diese Header-Datei enthält. Dies steht im Widerspruch zur One-Definition-Regel, die vorschreibt, dass eine Variable nur eine Definition haben darf.

C stellt jedoch einen syntaktischen Zucker bereit, der die Initialisierung integraler statischer Elemente innerhalb der Deklaration ermöglicht:

struct Gizmo {
  static const int count = 42;
};
Nach dem Login kopieren

Dies ist zulässig, solange der Ausdruck ein const-Integral- oder Aufzählungstyp ist, zur Kompilierungszeit ausgewertet werden kann und in einer einzelnen Übersetzungseinheit noch eine Definition vorhanden ist, die nicht verletzt die Ein-Definition-Regel. Zum Beispiel:

// gizmo.cpp
#include "gizmo.h"

const int Gizmo::count;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum sollten statische C-Membervariablen außerhalb der Klassendeklaration initialisiert 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