jest tą formą inicjalizacji tablicy ze wszystkimi zerami
char myarray[ARRAY_SIZE] = {0}
obsługiwane przez wszystkie kompilatory? ,
jeśli tak, czy istnieje podobna składnia do innych typów? na przykład
bool myBoolArray[ARRAY_SIZE] = {false}
jest tą formą inicjalizacji tablicy ze wszystkimi zerami
char myarray[ARRAY_SIZE] = {0}
obsługiwane przez wszystkie kompilatory? ,
jeśli tak, czy istnieje podobna składnia do innych typów? na przykład
bool myBoolArray[ARRAY_SIZE] = {false}
int a[10] = { 1, 2, 3 };
ustawię a[3]..a[9]
na 0
(„zainicjowane niejawnie to samo, co obiekty o statycznym czasie trwania”). Czy to dotyczy C ++?
false
nie jest tym samym co 0
, ale w {0}
0 jest konwertowane na false
, aw (dla C ++) {}
nie musisz nawet przejmować się konwersjami: jest zainicjowany false
lub 0
lub null-pointer lub jakimkolwiek innym domyślnym z uwzględnieniem typu.
Odpowiedzi:
Tak, ta forma inicjalizacji jest obsługiwana przez wszystkie kompilatory C ++. Jest częścią języka C ++. W rzeczywistości jest to idiom, który przyszedł do C ++ z języka C. W języku C = { 0 }
jest idiomatycznym uniwersalnym inicjatorem zera . Dotyczy to również prawie C ++.
Ponieważ ten inicjalizator jest uniwersalny, w przypadku bool
tablic nie potrzebujesz innej „składni”. 0
działa również jako inicjator dla bool
typu, więc
bool myBoolArray[ARRAY_SIZE] = { 0 };
gwarantuje zainicjowanie całej tablicy za pomocą false
. Jak również
char* myPtrArray[ARRAY_SIZE] = { 0 };
gwarantuje zainicjowanie całej tablicy z zerowymi wskaźnikami typu char *
.
Jeśli uważasz, że poprawia czytelność, z pewnością możesz użyć
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
ale chodzi o to, że = { 0 }
wariant daje dokładnie ten sam wynik.
Jednak w C ++ = { 0 }
może nie działać dla wszystkich typów, takich jak na przykład typy wyliczeniowe, których nie można zainicjować za pomocą wartości integralnej 0
. Ale C ++ obsługuje krótszą formę
T myArray[ARRAY_SIZE] = {};
czyli tylko pusta para {}
. Spowoduje to domyślną inicjalizację tablicy dowolnego typu (zakładając, że elementy pozwalają na domyślną inicjalizację), co oznacza, że w przypadku typów podstawowych (skalarnych) cała tablica zostanie poprawnie zainicjalizowana zerem.
bool myBoolArray[ARRAY_SIZE] = { false };
tablica jest inicjalizowana na false, ale jeśli piszę, bool myBoolArray[ARRAY_SIZE] = { true };
tylko pierwszy element jest ustawiony na true, podczas gdy wszystko inne jest fałszywe. Jakieś wyjaśnienie?
bool
tablicę, reszta zostanie zainicjalizowana przez zero. Tak już jest.
bool myBoolArray[ARRAY_SIZE];
, tablica słusznie zawiera losowe wartości, dlatego nie spodziewałbym się, że inicjalizacja może zwrócić tablicę z różnymi wartościami. To wszystko.
Tak, uważam, że powinno działać i można je również zastosować do innych typów danych.
Jednak w przypadku tablic klas, jeśli na liście inicjalizacyjnej jest mniej elementów niż elementów w tablicy, dla pozostałych elementów zostanie użyty domyślny konstruktor. Jeśli dla klasy nie zdefiniowano domyślnego konstruktora, lista inicjatorów musi być kompletna - to znaczy musi istnieć jeden inicjator dla każdego elementu w tablicy.
Możesz zadeklarować tablicę w C ++ w ten sposób. Jeśli znasz rozmiar tablicy, powinieneś zadeklarować tablicę dla: integer: int myArray[array_size];
Double: double myArray[array_size];
Char i string: char myStringArray[array_size];
Różnica między char i string jest następująca
char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";
Jeśli nie znasz rozmiaru tablicy, powinieneś pozostawić ją pustą, jak poniżej.
liczba całkowita: int myArray[array_size];
Podwójnie: double myArray[array_size];
false
to to samo co0
(w przeciwnymif(false)
razie nie oceniłoby to na fałsz), więc to, co masz, prawdopodobnie zadziała na 99% kompilatorów. Nie mogę być pewien pozostałego 1%, dopóki nie zacytujemy normy.