it-swarm.com.ru

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

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

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

если так, есть ли синтаксис, похожий на другие типы? например 

bool myBoolArray[ARRAY_SIZE] = {false} 
72
Eli

Да, эта форма инициализации поддерживается всеми компиляторами C++. Это часть языка C++. На самом деле, это идиома, пришедшая в 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] = {};

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

126
AnT

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

char myarray[ARRAY_SIZE] {0}
16
incises

Вы можете объявить массив в C++ следующими способами: __. Если вы знаете размер массива, вы должны объявить массив для: Integer: int myArray[array_size]; Double: double myArray[array_size]; Char и string: char myStringArray[array_size]; Разница между символом и строкой заключается в следующем

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

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

целое число: int myArray[array_size];

Double: double myArray[array_size];

0
Tabish

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

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

0
jasonline