2010-01-19 15 views
8

Un oggetto di una struct/classe (che non ha costruttore) può essere creato utilizzando un elenco di inizializzazione . Perché non è consentito su struct/class con il costruttore ?C++: Constructor contro inizializzatore lista in struct/classe

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

Inserisci un codice che illustri ciò che stai chiedendo. –

+1

Neil, la risposta aveva senso per me. – Anycorn

risposta

13

No, un oggetto con un costruttore non è più considerato un baccello (vecchi dati semplici). Gli oggetti devono contenere solo altri tipi di POD come membri non statici (inclusi i tipi di base). Un POD può avere funzioni statiche e membri di dati complessi statici.

Si noti che l'imminente standard C++ consentirà di definire elenchi di inizializzatori, che consentiranno l'inizializzazione di oggetti non POD con parentesi graffe.

0

Se per la tua domanda si intende chiedere, "Posso fare questo:"

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

... allora la risposta è no. C++ non consente questo.

+0

No, l'inizializzazione di una matrice di caratteri è diversa dall'inizializzazione di una struttura POD che può contenere variabili di tipi diversi. Inoltre, lo stai facendo il ctor, l'OP ha chiesto l'inizializzazione su un oggetto che ha un ctor definito. – Macke

+0

in realtà, g ++ ha un diavolo per farlo, non standard: (char [1]) {0} – Anycorn