В компьютерном программировании , инициализации (или инициализация) является присвоение начального значения для объекта данных или переменной. Способ выполнения инициализации зависит от языка программирования , а также от типа, класса памяти и т. Д. Объекта, который нужно инициализировать. Программные конструкции, выполняющие инициализацию, обычно называются инициализаторами и списками инициализаторов . Инициализация отличается от (и предшествует) Декларация , хотя два иногда может быть сплавлены на практике. Дополнением инициализации является финализация , которая в основном используется для объектов, но не для переменных.
Инициализация выполняется либо путем статического встраивания значения во время компиляции, либо путем присвоения во время выполнения . Раздел кода, который выполняет такую инициализацию, обычно известен как «код инициализации» и может включать в себя другие одноразовые функции, такие как открытие файлов; в объектно-ориентированном программировании код инициализации может быть частью конструктора (метод класса) или инициализатора (метод экземпляра). Установка в ячейку памяти шестнадцатеричных нулей также иногда называется «очисткой» и часто выполняется с помощью исключающей инструкции или (оба операнда указывают одну и ту же переменную) в машинном коде. уровень, так как он не требует дополнительного доступа к памяти.
Семейство языков C [ править ]
Инициализатор [ править ]
В C / C99 / C ++ инициализатор является необязательной частью декларатора . Он состоит из символа «=», за которым следует выражение или разделенный запятыми список выражений, помещенных в фигурные скобки (скобки). Последний список иногда называют «списком инициализаторов» или «списком инициализации» (хотя термин «список инициализаторов» формально зарезервирован для инициализации членов класса / структуры в C ++; см. Ниже ). Объявление, которое создает объект данных, а не просто описывает его существование, обычно называется определением .
Многие считают удобным проводить различие между терминами «декларация» и «определение», как в часто встречающейся фразе «различие между декларацией и определением ...», подразумевая, что декларация просто обозначает объект данных (или функцию ). Фактически, согласно стандарту C ++ , определение - это объявление. Тем не менее, использование «деклараций и определений», хотя формально неверно, является обычным явлением. [1] Хотя все определения являются объявлениями, не все объявления являются определениями.
Примеры C:
int я = 0 ; int k [ 4 ] = { 0 , 1 }; char tx [ 3 ] = 'а' ; char ty [ 2 ] = 'е' ; struct Point { int x ; int y ;} p = { . у = 13 , . х = 7 };
Примеры C ++:
int i2 ( 0 ); int j [ 2 ] = { rand (), k [ 0 ]}; MyClass * xox = новый MyClass ( 0 , «zaza» ); точка 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 ++ , Cline, Lomow, and Girou, Addison-Wesley, 1999, ISBN 0-201-30983-1 .