це така форма ініціалізації масиву для всіх 0
char myarray[ARRAY_SIZE] = {0}
підтримується усіма компіляторами? ,
якщо так, чи є синтаксис подібний до інших типів? наприклад
bool myBoolArray[ARRAY_SIZE] = {false}
це така форма ініціалізації масиву для всіх 0
char myarray[ARRAY_SIZE] = {0}
підтримується усіма компіляторами? ,
якщо так, чи є синтаксис подібний до інших типів? наприклад
bool myBoolArray[ARRAY_SIZE] = {false}
int a[10] = { 1, 2, 3 };
буде встановлено a[3]..a[9]
значення 0
, ("ініціалізується неявно так само, як і об'єкти, які мають статичну тривалість зберігання"). Чи справедливо це для С ++?
false
не те ж саме 0
, але в {0}
0 перетворюється на false
, а в (для C ++) {}
вам навіть не потрібно дбати про перетворення: він ініціалізується false
або, 0
або нульовий покажчик, або будь-який інший тип, чутливий за замовчуванням.
Відповіді:
Так, ця форма ініціалізації підтримується усіма компіляторами C ++. Це частина мови С ++. Насправді це ідіома, яка прийшла до C ++ з мови С. На мові С = { 0 }
є ідіоматичним універсальним нульовим ініціалізатором . Це також майже так у C ++.
Оскільки цей ініціалізатор універсальний, для bool
масиву вам насправді не потрібен інший "синтаксис".0
також працює як ініціалізатор для bool
типу, тому
bool myBoolArray[ARRAY_SIZE] = { 0 };
гарантовано ініціалізує весь масив за допомогою false
. Так само, як
char* myPtrArray[ARRAY_SIZE] = { 0 };
в гарантовано ініціалізує весь масив нульовими вказівниками типу char *
.
Якщо ви вважаєте, що це покращує читабельність, ви, звичайно, можете використовувати
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
але справа в тому, що = { 0 }
варіант дає вам абсолютно однаковий результат.
Однак у C ++ = { 0 }
може не працювати для всіх типів, наприклад, типів переліку, наприклад, які неможливо ініціалізувати інтегралом 0
. Але C ++ підтримує коротшу форму
T myArray[ARRAY_SIZE] = {};
тобто просто порожня пара {}
. Це призведе до ініціалізації за замовчуванням масиву будь-якого типу (припускаючи, що елементи дозволяють ініціалізацію за замовчуванням), що означає, що для базових (скалярних) типів весь масив буде належним чином нульово ініціалізований.
bool myBoolArray[ARRAY_SIZE] = { false };
масив ініціалізується на false, але якщо я пишу, bool myBoolArray[ARRAY_SIZE] = { true };
лише перший елемент має значення true, а все інше - false. Будь-яке пояснення?
bool
масив, решта для вас нульова. Це просто так.
bool myBoolArray[ARRAY_SIZE];
, масив по праву містить випадкові значення, тому я б не очікував, що ініціалізація може повернути масив з різними значеннями в ньому. Це все.
Так, я вважаю, що це має спрацювати, і його також можна застосувати до інших типів даних.
Однак для масивів класів, якщо в списку ініціалізатора менше елементів, ніж елементів у масиві, конструктор за замовчуванням використовується для решти елементів. Якщо для класу не визначений конструктор за замовчуванням, список ініціалізатора повинен бути повним - тобто для кожного елемента масиву повинен бути один ініціалізатор.
Ви можете оголосити масив у C ++ такими способами. Якщо ви знаєте розмір масиву, вам слід оголосити масив для: integer: int myArray[array_size];
Double: double myArray[array_size];
Char та string: char myStringArray[array_size];
Різниця між char та string така:
char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";
Якщо ви не знаєте розмір масиву, вам слід залишити масив порожнім, як показано нижче.
ціле число: int myArray[array_size];
Двомісний номер: double myArray[array_size];
false
- це те саме, що0
(інакшеif(false)
не оцінюватиметься як неправдиве), тому те, що у вас є, напевно, буде працювати на 99% компіляторів. Не можна бути впевненим в інших 1%, поки ми не процитуємо стандарт.