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



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



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



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



bool myBoolArray[ARRAY_SIZE] = {false} 
670   4  

4 ответов:

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

так как этот инициализатор является универсальным, для bool массив тебе не нужен другой "синтаксис". 0 работает как инициализатор для bool тип также, так что

bool myBoolArray[ARRAY_SIZE] = { 0 };

гарантированно инициализирует весь массив с помощью false. А также

char* myPtrArray[ARRAY_SIZE] = { 0 };

in гарантированно инициализирует весь массив с нулевыми указателями типа char *.

если вы считаете, что это улучшает читаемость, вы можете, конечно, использовать

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

но дело в том, что = { 0 } вариант дает вам ровно тот же результат.

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

T myArray[ARRAY_SIZE] = {};

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

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

char myarray[ARRAY_SIZE] {0}

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

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

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

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

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

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

Double:double myArray[array_size];

Comments

    Ничего не найдено.