stringtranslate.com

Инициализация (программирование)

В компьютерном программировании инициализация ( или инициализация) — это присвоение начального значения объекту данных или переменной. Способ выполнения инициализации зависит от языка программирования , а также типа, класса памяти и т. д. инициализируемого объекта. Программные конструкции, выполняющие инициализацию, обычно называются инициализаторами и списками инициализаторов . Инициализация отличается от объявления (и предшествует ему) , хотя на практике их иногда можно объединить. Дополнением к инициализации является финализация , которая в основном используется для объектов, а не для переменных.

Инициализация выполняется либо путем статического внедрения значения во время компиляции, либо путем присвоения во время выполнения . Раздел кода, который выполняет такую ​​инициализацию, обычно известен как «код инициализации» и может включать в себя другие, одноразовые функции, такие как открытие файлов; в объектно-ориентированном программировании код инициализации может быть частью конструктора (метод класса) или инициализатора (метод экземпляра). Установка ячейки памяти в шестнадцатеричные нули также иногда называется «очисткой» и часто выполняется с помощью исключающей инструкции или (оба операнда определяют одну и ту же переменную) на уровне машинного кода , поскольку она не требует дополнительного доступа к памяти.

Семья языков C

Инициализатор

В 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 .

Инициализация по умолчанию

Инициализация данных может происходить без явного синтаксиса в программе. Например, если статические переменные объявляются без инициализатора, то переменные примитивных типов данных инициализируются нулевым значением соответствующего типа, а статические объекты типа класса инициализируются их конструкторами по умолчанию .

Смотрите также

Рекомендации

  1. ^ Часто задаваемые вопросы по C++ , Клайн, Ломов и Жиру, Аддисон-Уэсли, 1999, ISBN  0-201-30983-1 .