Инициализация (программирование)
В компьютерном программировании инициализация или инициализация — это присвоение начального значения объекту данных или переменной. Способ выполнения инициализации зависит от языка программирования , а также типа, класса памяти и т. д. инициализируемого объекта. Программные конструкции, выполняющие инициализацию, обычно называются инициализаторами и списками инициализаторов . Инициализация отличается от объявления (и предшествует ему) , хотя на практике их иногда можно объединить. Дополнением к инициализации является финализация , которая в основном используется для объектов, а не для переменных.
Инициализация выполняется либо путем статического внедрения значения во время компиляции, либо путем присвоения во время выполнения . Раздел кода, выполняющий такую инициализацию, обычно известен как «код инициализации» и может включать в себя другие, одноразовые функции, такие как открытие файлов; в объектно-ориентированном программировании код инициализации может быть частью конструктора (метод класса) или инициализатора (метод экземпляра). Установка ячейки памяти в шестнадцатеричные нули также иногда называется «очисткой» и часто выполняется с помощью исключающей инструкции или (оба операнда указывают одну и ту же переменную) на уровне машинного кода , поскольку она не требует дополнительного доступа к памяти.
Семья языков C
[ редактировать ]Инициализатор
[ редактировать ]В C/C99/C++ инициализатор является необязательной частью декларатора . Он состоит из символа «=», за которым следует выражение или список выражений, разделенных запятыми, заключенных в фигурные скобки (фигурные скобки). Последний список иногда называют «списком инициализаторов» или «списком инициализации» (хотя термин «список инициализаторов» формально зарезервирован для инициализации членов класса/структуры в C++; см. ниже ). Объявление, которое создает объект данных, а не просто описывает его существование, обычно называется определением .
Многие находят удобным проводить различие между терминами «объявление» и «определение», как в часто встречающейся фразе «различие между объявлением и определением ...», подразумевая, что объявление просто обозначает объект данных (или функцию). ). Фактически, согласно стандарту C++ , определение — это объявление. Тем не менее, использование «объявления и определения», хотя и формально неверное, является распространенным явлением. [1] Хотя все определения являются декларациями, не все декларации являются определениями.
Примеры С:
int i = 0;
int k[4] = {0, 1};
char tx[3] = 'a';
char ty[2] = 'f';
struct Point {int x; int y;} p = { .y = 13, .x = 7 };
Примеры С++:
int i2(0);
int j[2] = {rand(), k[0]};
MyClass* xox = new MyClass(0, "zaza");
point q = {0, i + 1};
Список инициализаторов
[ редактировать ]В C++ конструктор класса/структуры может иметь список инициализаторов внутри определения, но до тела конструктора. Важно отметить, что при использовании списка инициализации значения не присваиваются переменной. Они инициализируются. В приведенном ниже примере 0 инициализируется в re и im. Пример:
struct IntComplex {
IntComplex() : re(0), im(0) {}
int re;
int im;
};
Здесь конструкция : re(0), im(0)
это список инициализаторов.
Иногда термин «список инициализаторов» также используется для обозначения списка выражений в инициализаторе массива или структуры.
В C++11 предусмотрена более мощная концепция списков инициализаторов с помощью шаблона, называемого std::initializer_list .
Инициализация по умолчанию
[ редактировать ]Инициализация данных может происходить без явного синтаксиса в программе. Например, если статические переменные объявлены без инициализатора, то переменные примитивных типов данных инициализируются нулевым значением соответствующего типа, а статические объекты типа класса инициализируются их конструкторами по умолчанию .
См. также
[ редактировать ]- Время жизни объекта
- Процесс финализатора и связанный с ним шаблон финализации
Ссылки
[ редактировать ]- ^ Часто задаваемые вопросы по C++ , Клайн, Ломоу и Жиру, Аддисон-Уэсли, 1999, ISBN 0-201-30983-1 .