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!