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
Freigeben: 2024-11-21 00:49:13
Original
572 Leute haben es durchsucht

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

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

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!

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