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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top