Heim >Backend-Entwicklung >C++ >Ist eine Klasse mit klasseninternen Member-Initialisierern immer noch ein Aggregat in C?
C 11-Aggregatinitialisierung für Klassen mit nichtstatischen Mitgliedsinitialisierern
Die Verwendung von klasseninternen Mitgliedsinitialisierern kann sich erheblich auf das Klassenverhalten auswirken C . Insbesondere wirft es die Frage auf, ob eine Klasse unter diesen Umständen ein Aggregat bleibt.
In C 11 führen klasseninterne Member-Initialisierer eine erhebliche Einschränkung ein: Sie verbieten die Klassifizierung einer Klasse oder Struktur als Aggregat. Dies wird im Entwurf des C 11-Standards deutlich, der ein Aggregat definiert als „eine Klasse ohne vom Benutzer bereitgestellte Konstruktoren, ohne geschweifte Klammern oder Gleichheitsinitialisierer für nicht-statische Datenelemente, ohne private oder geschützte nicht-statische Datenelemente, Nr Basisklassen und keine virtuellen Funktionen. Durch die Einführung von In-Class-Initialisierern ähnelt eine Klasse einem benutzerdefinierten Konstruktor und verliert ihren Aggregatstatus.
Diese Einschränkung wurde jedoch in C 14 aufgehoben. Member-Initialisierer verhindern nicht mehr, dass eine Klasse als Konstruktor betrachtet wird Aggregat, da der Standard überarbeitet wurde, um diese Einschränkung zu beseitigen. Diese Änderung wird in N3605 detailliert beschrieben, in dem vorgeschlagen wird, die Beschränkung für Aggregate mit Mitgliedsinitialisierern aufzuheben.
Der Grund für diese Änderung ergibt sich aus der Erkenntnis, dass Mitgliedsinitialisierer nicht mit benutzerdefinierten Konstruktoren gleichwertig sind. Obwohl sie einige Gemeinsamkeiten aufweisen, orientieren sich Member-Initialisierer eher am Konzept der Aggregatinitialisierung, das eine einfache und effiziente Methode zum Initialisieren von Objekten sein soll.
Zusammenfassend lässt sich sagen, dass in C 11 klasseninterne Member Initialisierer disqualifizierten eine Klasse vom Aggregatstatus, aber diese Einschränkung wurde in C 14 entfernt, was eine größere Flexibilität bei der Klasseninitialisierung ermöglicht.
Das obige ist der detaillierte Inhalt vonIst eine Klasse mit klasseninternen Member-Initialisierern immer noch ein Aggregat in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!