це така форма ініціалізації масиву для всіх 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%, поки ми не процитуємо стандарт.