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