- это форма инициализации массива для всех 0s
char myarray[ARRAY_SIZE] = {0}
поддерживается всеми компиляторами?,
Если это так, существует ли подобный синтаксис для других типов? например
bool myBoolArray[ARRAY_SIZE] = {false}
- это форма инициализации массива для всех 0s
char myarray[ARRAY_SIZE] = {0}
поддерживается всеми компиляторами?,
Если это так, существует ли подобный синтаксис для других типов? например
bool myBoolArray[ARRAY_SIZE] = {false}
Да, эта форма инициализации поддерживается всеми компиляторами С++. Это часть языка С++. Фактически, это идиома, пришедшая на С++ с языка 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] = {};
то есть. просто пустая пара {}
. Это будет по умолчанию инициализировать массив любого типа (при условии, что элементы разрешают инициализацию по умолчанию), что означает, что для базовых (скалярных) типов весь массив будет правильно инициализирован нулем.
Обратите внимание, что '=' является необязательным в синтаксисе универсальной инициализации С++ 11, и обычно считается лучшим стилем для записи:
char myarray[ARRAY_SIZE] {0}
Да, я считаю, что он должен работать, и он также может применяться к другим типам данных.
Однако для массивов классов, если в списке инициализаторов меньше элементов, чем элементов в массиве, конструктор по умолчанию используется для остальных элементов. Если для класса не задан конструктор по умолчанию, список инициализаторов должен быть полным, т.е. Для каждого элемента массива должен быть один инициализатор.
Вы можете объявить массив на С++ этими способами.
Если вы знаете размер массива, вы должны объявить массив для:
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];