Heim > Backend-Entwicklung > C++ > Können Klassen mit Member-Initialisierern Aggregate in C 14 sein?

Können Klassen mit Member-Initialisierern Aggregate in C 14 sein?

DDD
Freigeben: 2024-11-09 14:33:02
Original
613 Leute haben es durchsucht

Can Classes with Member Initializers be Aggregates in C  14?

C 11 Aggregatinitialisierung für Klassen mit Member-Initialisierern

C 11 führt die Aggregatinitialisierung mit geschweiften Klammern für Klassen ein und ermöglicht die Angabe von Initialisierern für alle nicht statischen Datenelemente. Der Standard in C 11 wirft jedoch die Frage auf: Können klasseninterne Mitgliedsinitialisierer in Aggregatstrukturen vorhanden sein?

In C 11 führt das Vorhandensein von Mitgliedsinitialisierern in einer Klasse dazu, dass die Struktur oder Klasse nicht aggregiert ist. Diese Einschränkung ergab sich aus der Annahme, dass klasseninterne Member-Initialisierer Ähnlichkeiten mit benutzerdefinierten Konstruktoren aufweisen. Allerdings sollte das Hinzufügen von Mitgliedsinitialisierern eine Klasse nicht automatisch von der Eigenschaft als Aggregat ausschließen.

Der C 14-Standard behebt dieses Problem, indem er die Definition von Aggregatklassen so ändert, dass nur vom Benutzer bereitgestellte Konstruktoren, privat oder geschützt, nicht statisch, ausgeschlossen werden Datenelemente, Basisklassen und virtuelle Funktionen. Die Einbeziehung von Mitgliedsinitialisierern als Disqualifizierer wurde entfernt.

Daher wird in C 14 eine Klasse wie die folgende jetzt als Aggregat betrachtet:

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

A a{0, 1}; 
Nach dem Login kopieren

In C 11 das Obige Code wäre ungültig gewesen, da A kein Aggregat ist. In C 14 ist der Code jedoch gültig und das Objekt a wird mit a = 0 und b = 1 initialisiert.

Neueste Versionen von g (5.0 und höher) unterstützen jetzt die Definition von Aggregaten mit in C 14 nicht statische Member-Initialisierer. Daher wird der Beispielcode in g entweder mit -std=c 14 oder -std=c 1y kompiliert.

Das obige ist der detaillierte Inhalt vonKönnen Klassen mit Member-Initialisierern Aggregate in C 14 sein?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage