Question

Un objet d'un struct / classe (qui n'a pas de constructeur ) peut être créé en utilisant un liste d'initialisation . Pourquoi est-ce pas autorisé sur struct / classe avec constructeur

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
Était-ce utile?

La solution

Non, un objet avec un constructeur est plus considéré comme un POD (données pures et simples). Les objets ne doivent contenir que d'autres types POD en tant que membres non statiques (y compris les types de base). Un POD peut avoir des fonctions statiques et les membres de données statiques complexes.

Notez que la prochaine norme C ++ vous permet de définir des listes de initialiseur, qui permettront des objets non-POD à initialisés avec des accolades.

Autres conseils

Si votre question vous dire de demander: « Puis-je faire ceci: »

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

... alors la réponse est non. C ++ ne permet pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top