Подтвердить что ты не робот

Инициализация массива С++

- это форма инициализации массива для всех 0s

char myarray[ARRAY_SIZE] = {0} поддерживается всеми компиляторами?,

Если это так, существует ли подобный синтаксис для других типов? например

bool myBoolArray[ARRAY_SIZE] = {false} 
4b9b3361

Ответ 1

Да, эта форма инициализации поддерживается всеми компиляторами С++. Это часть языка С++. Фактически, это идиома, пришедшая на С++ с языка C. На языке C = { 0 } - идиоматический универсальный нулевой инициализатор. Это также почти так в С++.

Поскольку этот инициализатор универсален, для массива 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 } дает вам точно такой же результат.

Однако, в С++ = { 0 } может не работать для всех типов, например типов перечислений, которые не могут быть инициализированы интегралом 0. Но С++ поддерживает более короткую форму

T myArray[ARRAY_SIZE] = {};

то есть. просто пустая пара {}. Это будет по умолчанию инициализировать массив любого типа (при условии, что элементы разрешают инициализацию по умолчанию), что означает, что для базовых (скалярных) типов весь массив будет правильно инициализирован нулем.

Ответ 2

Обратите внимание, что '=' является необязательным в синтаксисе универсальной инициализации С++ 11, и обычно считается лучшим стилем для записи:

char myarray[ARRAY_SIZE] {0}

Ответ 3

Да, я считаю, что он должен работать, и он также может применяться к другим типам данных.

Однако для массивов классов, если в списке инициализаторов меньше элементов, чем элементов в массиве, конструктор по умолчанию используется для остальных элементов. Если для класса не задан конструктор по умолчанию, список инициализаторов должен быть полным, т.е. Для каждого элемента массива должен быть один инициализатор.

Ответ 4

Вы можете объявить массив на С++ этими способами. Если вы знаете размер массива, вы должны объявить массив для: integer: int myArray[array_size]; Двойной: double myArray[array_size]; Char и строка: char myStringArray[array_size]; Разница между char и строкой выглядит следующим образом

char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";

Если вы не знаете размер массива, вы должны оставить массив пустым, как показано ниже.

integer: int myArray[array_size];

Двойной: double myArray[array_size];