2010-01-19 14 views
8

Eine Aufgabe einer struct/Klasse (das hat keinen Konstruktor) kann unter Verwendung eines Initialisiererliste erstellt werden. Warum ist dies in Struktur/Klasse mit Erbauer nicht erlaubt?C++: Constructor Vergleich Initialisiererliste in struct/class

struct r { int a; }; 
struct s { int a; s() : a(0) {} }; 
r = { 1 }; // works 
s = { 1 }; // does not work 
+2

Veröffentlichen Sie einen Code, der veranschaulicht, wonach Sie fragen. –

+1

Neil, Antwort ergab für mich Sinn. – Anycorn

Antwort

13

Nein, ein Objekt mit einem Konstruktor wird nicht mehr als POD (Plain Old Data) betrachtet. Objekte dürfen nur andere POD-Typen als nicht statische Elemente enthalten (einschließlich Basistypen). Ein POD kann statische Funktionen und statische komplexe Datenelemente haben.

Beachten Sie, dass der bevorstehende C++ - Standard Ihnen ermöglicht, Initialisierungslisten zu definieren, die es ermöglichen, Nicht-POD-Objekte mit geschweiften Klammern zu initialisieren.

0

Wenn Ihre Frage, die Sie zu fragen, meinen, „Kann ich dies tun:“

struct MyGizmo 
{ 
    char things_[5]; 
    MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'})(); 
}; 

... dann ist die Antwort nein. C++ lässt dies nicht zu.

+0

Nein, die Initialisierung eines Arrays von Zeichen unterscheidet sich von der Initialisierung einer POD-Struktur, die Variablen verschiedener Typen enthalten kann. Außerdem machst du das ctor, das OP fragte nach Initialisierung auf einem Objekt, das einen definierten ctor hat. – Macke

+0

eigentlich, g ++ hat das zu tun, nicht Standard: (char [1]) {0} – Anycorn