Uwagi na temat C ++: Inicjalizacja macierzy ma ładną listę nad inicjowaniem macierzy. mam
int array[100] = {-1};
spodziewając się, że będzie pełny z -1, ale nie, tylko pierwsza wartość jest, a reszta to 0 pomieszane z losowymi wartościami.
Kod
int array[100] = {0};
działa dobrze i ustawia każdy element na 0.
Czego tu brakuje? Nie można go zainicjować, jeśli wartość nie jest równa zero?
I 2: Czy domyślna inicjalizacja (jak wyżej) jest szybsza niż zwykła pętla przez całą tablicę i przypisuje wartość, czy robi to samo?
{0}
nie jest specjalnym przypadkiem dla struktur ani tablic. Zasadą jest, że elementy bez inicjalizatora są inicjowane tak, jakby miały 0
dla inicjatora. Jeśli istnieją zagnieżdżone agregaty (np. struct x array[100]
), Wówczas inicjatory są stosowane do nieagregatów w kolejności „major-row”; nawiasy klamrowe można opcjonalnie pominąć. struct x array[100] = { 0 }
jest ważny w C; i ważne w C ++, o ile pierwszy członek struct X
przyjmuje 0
jako inicjator.
{ 0 }
nie jest czymś specjalnym w C, ale o wiele trudniej jest zdefiniować typ danych, którego nie można zainicjować, ponieważ nie ma konstruktorów, a tym samym nie można powstrzymać się 0
przed niejawną konwersją i przypisaniem do czegoś .