Z definicji inicjalizacja domyślna to inicjalizacja, która ma miejsce, gdy nie określono żadnej innej inicjalizacji; język C ++ gwarantuje, że każdy obiekt, dla którego nie podasz jawnego inicjatora, zostanie domyślnie zainicjowany (C ++ 11 §8.5 / 11). Obejmuje to obiekty typu std::array<T, N>
i T[N]
.
Należy pamiętać, że istnieją typy, dla których domyślna inicjalizacja nie ma wpływu i pozostawia nieokreśloną wartość obiektu: dowolny typ niebędący klasą, nie tablicowy (§8.5 / 6). W konsekwencji, domyślnie zainicjowana tablica obiektów o takich typach będzie miała nieokreśloną wartość, np .:
int plain_int;
int c_style_array[13];
std::array<int, 13> cxx_style_array;
Zarówno tablica w stylu c, jak i std::array
są wypełnione liczbami całkowitymi o nieokreślonej wartości, tak jak plain_int
ma nieokreśloną wartość.
Czy istnieje składnia, która będzie działać na wszystkich tablicach (w tym tablicach o rozmiarze zerowym), aby zainicjować wszystkie elementy do ich wartości domyślnych?
Domyślam się, że kiedy mówisz „do ich wartości domyślnej”, naprawdę masz na myśli „zainicjuj wszystkie elementy na T{}
”. To nie jest inicjalizacja domyślna , jest to inicjalizacja wartości (8.5 / 7). Możesz łatwo zażądać inicjalizacji wartości w C ++ 11, nadając każdej deklaracji pusty inicjator:
int plain_int{};
int c_style_array[13]{};
std::array<int, 13> cxx_style_array{};
Który z kolei zainicjuje wartość i wartość wszystkich elementów tablicy, w wyniku czego plain_old_int
wszystkie elementy członkowskie obu rodzajów tablic zostaną zainicjowane na zero.
T x[N]
składni.