C ++: Constructor liste par rapport à initialiseur struct / classe
-
21-09-2019 - |
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
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.