Heim > Backend-Entwicklung > C++ > Warum kann ich nicht konstante statische Mitglieder innerhalb einer C-Klasse nicht initialisieren?

Warum kann ich nicht konstante statische Mitglieder innerhalb einer C-Klasse nicht initialisieren?

Patricia Arquette
Freigeben: 2024-12-12 16:19:11
Original
729 Leute haben es durchsucht

Why Can't I Initialize Non-Const Static Members Inside a C   Class?

Klasseninterne Initialisierung statischer Mitglieder in C

In C ist die Definition einer statischen Mitgliedsvariablen innerhalb der Klassendeklaration nicht zulässig. Diese Aktion führt zum Kompilierungsfehler „ISO C verbietet die klasseninterne Initialisierung des nicht konstanten statischen Mitglieds ‚j‘“.

Gründe für das Verbot:

  • Code-Effizienz: Das Initialisieren statischer Mitglieder in der Klassendeklaration kann zu doppelten Definitionen führen, wenn die Klasse in mehrere Kompilierungen einbezogen wird Einheiten.
  • Kontrolle über die Initialisierung: Statische Mitglieder erfordern häufig eine bestimmte Initialisierungslogik, die nicht garantiert werden kann, wenn sie inline in der Klassendeklaration initialisiert werden.

Ausnahme für Const-Mitglieder:

Statische Const-Mitglieder dürfen in der Klassendeklaration initialisiert werden, da sie nicht geändert werden nach der Initialisierung. Dies stellt die Effizienz des Codes sicher und macht eine explizite Initialisierung überflüssig.

Auswirkungen auf Standardwerte:

In C werden statische Variablen automatisch auf 0 initialisiert, wenn dies nicht explizit der Fall ist initialisiert. In C werden statische Variablen jedoch nicht automatisch initialisiert. Sie müssen sie entweder in der Klassendeklaration (für const-Mitglieder) oder in einer separaten .cpp-Datei manuell initialisieren.

Lösung:

Um eine nicht konstante Statik zu definieren Wenn Sie eine Mitgliedsvariable in C verwenden, sollten Sie sie in einer separaten CPP-Datei und nicht in der Klassendeklaration initialisieren.

Für Beispiel:

// Header file
class Test {
 public:
  static int j;
};

// .cpp file
int Test::j = 0;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum kann ich nicht konstante statische Mitglieder innerhalb einer C-Klasse nicht initialisieren?. 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