Heim >Backend-Entwicklung >C++ >Können Klassen mit nichtstatischen Elementinitialisierern in C aggregiert initialisiert werden?

Können Klassen mit nichtstatischen Elementinitialisierern in C aggregiert initialisiert werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-21 00:49:13599Durchsuche

Can Classes with Non-Static Member Initializers Be Aggregate Initialized in C  ?

Aggregatinitialisierung für Klassen mit nichtstatischen Elementinitialisierern

In C ist die Aggregatinitialisierung eine praktische Syntax zum Initialisieren von Mitgliedern einer Klasse oder struct ohne expliziten Aufruf eines Konstruktors. Die Verwendung von klasseninternen Member-Initialisierern wirft jedoch die Frage auf, ob die Klasse/Struktur ein Aggregat bleibt.

C 11 und Aggregatstatus

Gemäß C 11-Standard verhindert, dass eine Klasse/Struktur als Aggregat betrachtet wird, wenn sie über klasseninterne Member-Initialisierer verfügt. Dies liegt daran, dass Elementinitialisierer benutzerdefinierten Konstruktoren ähneln, die in Aggregaten nicht zulässig sind.

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; // Invalid for C++11

C 14 und Aggregatinitialisierung

Allerdings in C 14 wurde diese Einschränkung aufgehoben. Die aggregierte Initialisierung ist jetzt für Klassen/Strukturen mit nicht statischen Elementinitialisierern zulässig. Diese Änderung wurde vorgenommen, um das Feedback der Entwickler zu berücksichtigen und das Verständnis der Aggregatinitialisierung zu vereinfachen.

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; // Valid for C++14

G-Unterstützung für C 14-Aggregate

Beachten Sie, dass G Version 5.0 und höher Unterstützt die C 14-Aggregatinitialisierung für Klassen/Strukturen mit nicht statischen Member-Initialisierern. Ältere Versionen von G erkennen diese Syntax jedoch möglicherweise nicht.

Das obige ist der detaillierte Inhalt vonKönnen Klassen mit nichtstatischen Elementinitialisierern in C aggregiert initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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