Sie sind nicht null, wenn Sie die Struktur nicht initialisieren.
Snapshot s; // receives no initialization
Snapshot s = {}; // value initializes all members
Der zweite macht alle Mitglieder auf Null, der erste lässt sie bei nicht spezifizierten Werten. Beachten Sie, dass es rekursiv ist:
struct Parent { Snapshot s; };
Parent p; // receives no initialization
Parent p = {}; // value initializes all members
Der zweite wird p.s.{x,y}
Null machen . Sie können diese aggregierten Initialisierungslisten nicht verwenden, wenn Ihre Struktur Konstruktoren enthält. In diesem Fall müssen Sie diesen Konstruktoren eine ordnungsgemäße Initialisierung hinzufügen
struct Snapshot {
int x;
double y;
Snapshot():x(0),y(0) { }
// other ctors / functions...
};
Initialisiert sowohl x als auch y auf 0. Beachten Sie, dass Sie x(), y()
sie unabhängig von ihrem Typ initialisieren können: Dies ist dann die Wertinitialisierung und ergibt normalerweise einen korrekten Anfangswert (0 für int, 0.0 für double, wobei der Standardkonstruktor für benutzerdefiniert aufgerufen wird Typen, die vom Benutzer deklarierte Konstruktoren haben, ...). Dies ist besonders wichtig, wenn Ihre Struktur eine Vorlage ist.