Heim > Backend-Entwicklung > C++ > Hauptteil

Kann eine C-Klasse mit nicht statischen Elementinitialisierern ein Aggregat sein?

Mary-Kate Olsen
Freigeben: 2024-11-10 03:58:02
Original
714 Leute haben es durchsucht

Can a C   class with non-static member initializers be an aggregate?

C 11 Aggregatinitialisierung für Klassen mit nicht-statischen Elementinitialisierern

In C 11 wird eine Klasse oder Struktur als Aggregat betrachtet, wenn dies der Fall ist erfüllt bestimmte Kriterien, darunter keine benutzerdefinierten Konstruktoren, keine Initialisierer mit Klammern oder Gleichheit für nicht statische Datenelemente und keine privaten oder geschützten Elemente nicht-statische Datenelemente.

In Standard-C 11 ändert jedoch das Hinzufügen nicht-statischer Elementinitialisierer zu einer Klasse oder Struktur ihren Status als Aggregat. Dies liegt daran, dass Elementinitialisierer benutzerdefinierten Konstruktoren ähneln, was die Klasse oder Struktur davon ausschließt, ein Aggregat zu sein. Diese Definitionsänderung kann zu unerwartetem Verhalten führen.

Im bereitgestellten Beispiel:

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

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

Die Klasse A wird aufgrund des Vorhandenseins von klasseninternen Member-Initialisierern nicht mehr als Aggregat betrachtet. Infolgedessen ist die aggregierte Initialisierung A a{0,1}; ist ungültig.

Dieses Verhalten wurde in C 14 überarbeitet, wo das Vorhandensein nicht statischer Elementinitialisierer nicht mehr verhindert, dass eine Klasse oder Struktur ein Aggregat ist. Daher ist in C 14 die Gesamtinitialisierung von A gültig.

Es ist wichtig zu beachten, dass der C-Standard Änderungen erfahren hat und es wichtig ist, die neuesten Versionen des Standards zu überprüfen oder ein kompatibles C zu verwenden 14 oder neuerer Compiler, um eine korrekte Interpretation des Codes mit Aggregatinitialisierung und nicht-statischen Member-Initialisierern sicherzustellen.

Das obige ist der detaillierte Inhalt vonKann eine C-Klasse mit nicht statischen Elementinitialisierern ein Aggregat 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage