Инициализация массива С++
- это форма инициализации массива для всех 0s
char myarray[ARRAY_SIZE] = {0}
поддерживается всеми компиляторами?,
Если это так, существует ли подобный синтаксис для других типов? например
bool myBoolArray[ARRAY_SIZE] = {false}
Ответы
Ответ 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];