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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top