C 11 Aggregatinitialisierung für Klassen mit nicht-statischen Member-Initialisierern
In C 11 Strukturen und Klassen mit benutzerdefinierten und privaten Konstruktoren oder geschützte nicht statische Datenelemente gelten nicht als Aggregate. Historisch gesehen war dies auch bei Klassen mit nicht statischen Elementinitialisierern der Fall, obwohl ihnen benutzerdefinierte Konstruktoren fehlten.
In C 14 wurde diese Einschränkung jedoch entfernt. Jetzt können Klassen mit nicht statischen Elementinitialisierern immer noch Aggregate sein, solange sie die anderen Anforderungen für Aggregate erfüllen:
Für Beispiel:
struct A { int a = 3; int b = 3; }; int main() { A a{0, 1}; // This is now allowed in C++14 return 0; }
Diese Änderung wurde durch den Wunsch motiviert, das Verhalten der Aggregatinitialisierung mit der Intuition in Einklang zu bringen. In-Class-Initialisierer entsprechen im Wesentlichen benutzerdefinierten Konstruktoren, es ist jedoch kontraintuitiv, dass sie verhindern, dass eine Klasse ein Aggregat ist.
Seit G 5.0 gibt es C 14-Aggregate mit nicht statischen Datenelementinitialisierern unterstützt mit std=c 1y oder -std=c 14.
Das obige ist der detaillierte Inhalt vonKönnen Klassen mit nichtstatischen Elementinitialisierern in C 14 Aggregate sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!