Ils ne sont pas nuls si vous n'initialisez pas la structure.
Snapshot s; // receives no initialization
Snapshot s = {}; // value initializes all members
La seconde rendra tous les membres nuls, la première les laisse à des valeurs non spécifiées. Notez que c'est récursif :
struct Parent { Snapshot s; };
Parent p; // receives no initialization
Parent p = {}; // value initializes all members
Le second fera p.s.{x,y}
zéro. Vous ne pouvez pas utiliser ces listes d'initialisation agrégées si vous avez des constructeurs dans votre structure. Si c'est le cas, vous devrez ajouter l'initialisation appropriée à ces constructeurs
struct Snapshot {
int x;
double y;
Snapshot():x(0),y(0) { }
// other ctors / functions...
};
initialisera x et y à 0. Notez que vous pouvez utiliser x(), y()
pour les initialiser sans tenir compte de leur type : C'est alors l'initialisation de la valeur, et cela donne généralement une valeur initiale correcte (0 pour int, 0.0 pour double, appel du constructeur par défaut pour les types définis par l'utilisateur qui ont des constructeurs déclarés par l'utilisateur, ...). Ceci est important, surtout si votre structure est un modèle.