C ++: Konstruktor gegen Initialisiererliste in Struktur/Klasse
-
21-09-2019 - |
Frage
Ein Objekt einer Struktur/Klasse (das hat keine Konstrukteur) kann mit einem erstellt werden Initialisiererliste. Warum ist dies nicht auf Struktur/Klasse mit erlaubt Konstrukteur?
struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
Lösung
Nein, ein Objekt mit einem Konstruktor wird nicht mehr als Pod (einfache alte Daten) angesehen. Objekte dürfen nur andere POD-Typen als nicht statische Mitglieder (einschließlich Grundtypen) enthalten. Ein Pod kann statische Funktionen und statische komplexe Datenmitglieder haben.
Beachten Sie, dass Sie mit dem bevorstehenden C ++-Standard die Initialisiererlisten definieren können, mit denen Nicht-Pod-Objekte mit Zahnspangen initialisiert werden können.
Andere Tipps
Wenn Sie nach Ihrer Frage fragen wollen: "Kann ich das tun:"
struct MyGizmo
{
char things_[5];
MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'}) ();
};
... dann ist die Antwort nein. C ++ lässt dies nicht zu.