C ++: elenco di costruttore contro inizializzatore in struct/classe
-
21-09-2019 - |
Domanda
Un oggetto di una struttura/classe (che non ha no costruttore) può essere creato usando un Elenco inizializzatore. Perché questo non è consentito su struct/classe con costruttore?
struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
Soluzione
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 lo standard C ++ imminente consentirà di definire gli elenchi di inizializzatori, che consentiranno di inizializzare gli oggetti non pod con le parentesi graffe.
Altri suggerimenti
Se dalla tua domanda intendi chiedere "Posso farlo:"
struct MyGizmo
{
char things_[5];
MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'}) ();
};
... allora la risposta è no. C ++ non lo consente.