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

Können Klassen mit nichtstatischen Elementinitialisierern in C 14 Aggregate sein?

Susan Sarandon
Susan SarandonOriginal
2024-11-29 03:50:13517Durchsuche

Can Classes with Non-Static Member Initializers Be Aggregates in C  14?

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:

  • Keine benutzerdefinierten Konstruktoren
  • Keine privaten oder geschützten Nicht-Konstruktoren -statische Datenmitglieder
  • Keine Basisklassen
  • Keine virtuellen Funktionen

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!

Stellungnahme:
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