Из Википедии, бесплатной энциклопедии
  (Перенаправлено из инициализатора )
Перейти к навигации Перейти к поиску

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

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

Семейство языков 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 .

Инициализация по умолчанию [ править ]

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

См. Также [ править ]

Ссылки [ править ]

  1. ^ Часто задаваемые вопросы по C ++ , Cline, Lomow, and Girou, Addison-Wesley, 1999, ISBN  0-201-30983-1 .