Non sono nulli se non si inizializza la struttura.
Snapshot s; // receives no initialization
Snapshot s = {}; // value initializes all members
La seconda farà tutti i membri nullo, il primo li lascia a valori non specificati. Si noti che è ricorsivo:
struct Parent { Snapshot s; };
Parent p; // receives no initialization
Parent p = {}; // value initializes all members
Il secondo farà p.s.{x,y}
zero. Non puoi usare questi elenchi di inizializzatori aggregati se hai costruttori nella tua struct. Se questo è il caso, si dovrà aggiungere una corretta inizializzazione del a quei costruttori
struct Snapshot {
int x;
double y;
Snapshot():x(0),y(0) { }
// other ctors/functions...
};
inizializza xey a 0. Si noti che è possibile utilizzare x(), y()
per inizializzare loro senza tener conto del loro tipo: Che è poi l'inizializzazione valore e di solito restituisce un valore iniziale appropriato (0 per int, 0.0 per double, chiamando il costruttore predefinito per i tipi definiti dall'utente che hanno costruttori dichiarati dall'utente, ...). Questo è importante specialmente se la tua struttura è un modello.
fonte
2009-07-01 15:00:33
Utilizzare uno std :: map <> e tornare 0 quando una chiave non lo fa esistere. – Jonny