Nie są one zerowe, jeśli nie zainicjalizujesz struktury.
Snapshot s; // receives no initialization
Snapshot s = {}; // value initializes all members
Drugi powoduje, że wszystkie elementy są zerowe, a pierwszy pozostawia je w nieokreślonych wartościach. Zauważ, że jest rekurencyjna:
struct Parent { Snapshot s; };
Parent p; // receives no initialization
Parent p = {}; // value initializes all members
Drugi uczyni p.s.{x,y}
zerowy. Nie możesz użyć tych agregujących list inicjalizujących, jeśli masz konstruktory w swojej strukturze. Jeśli tak jest, trzeba będzie dodać właściwą initalization tych konstruktorów
struct Snapshot {
int x;
double y;
Snapshot():x(0),y(0) { }
// other ctors/functions...
};
zainicjuje X i Y 0. Zauważ, że możesz użyć x(), y()
zainicjować je bez uwzględnienia ich typu: To wtedy inicjalizacji wartość i zwykle daje właściwą wartość początkową (0 dla int, 0.0 dla double, wywołanie domyślnego konstruktora dla typów zdefiniowanych przez użytkownika, które mają deklarowane konstruktory, ...). Jest to szczególnie ważne, jeśli struktura jest szablonem.
Użyj std :: map <> i zwraca 0, gdy klucz nie istnieć. – Jonny