Inicializace (programování) - Initialization (programming)

V počítačovém programování je inicializace (nebo inicializace) přiřazení počáteční hodnoty pro datový objekt nebo proměnnou. Způsob, jakým se inicializace provádí, závisí na programovacím jazyce a typu, třídě úložiště atd. Objektu, který má být inicializován. Programovací konstrukce, které provádějí inicializaci, se obvykle nazývají inicializátory a seznamy inicializátorů . Inicializace je odlišná od deklarace (a před ní) , i když v praxi může být někdy spojena. Doplňkem inicializace je finalizace , která se primárně používá pro objekty, ale ne pro proměnné.

Inicializace se provádí buď statickým vložením hodnoty v době kompilace, nebo přiřazením za běhu . Část kódu, která provádí takovou inicializaci, je obecně známá jako „inicializační kód“ a může zahrnovat další jednorázové funkce, jako je otevírání souborů; v objektově orientovaném programování může být inicializační kód součástí konstruktoru (metoda třídy) nebo inicializátoru (metoda instance). Nastavení umístění paměti na hexadecimální nuly je také někdy známé jako „vymazání“ a je často prováděno výlučně nebo instrukcí (oba operandy specifikují stejnou proměnnou) na úrovni strojového kódu , protože nevyžaduje žádný další přístup do paměti.

Rodina jazyků C.

Inicializátor

V C / C99 / C ++ je inicializátor volitelnou součástí deklarátoru . Skládá se ze znaku '=', za nímž následuje výraz nebo seznam výrazů oddělených čárkami umístěných ve složených závorkách (složené závorky). Druhý seznam se někdy nazývá „seznam inicializátorů“ nebo „seznam inicializátorů“ (ačkoli termín „seznam inicializátorů“ je formálně vyhrazen pro inicializaci členů třídy / struktury v C ++; viz níže ). Deklarace, která vytváří datový objekt, namísto pouhého popisu jeho existence, se běžně nazývá definice .

Mnoho lidí považuje za vhodné rozlišovat mezi pojmy „deklarace“ a „definice“, jako je tomu v běžně užívané frázi „rozdíl mezi deklarací a definicí ...“, což znamená, že deklarace pouze označuje datový objekt (nebo funkci) ). Ve skutečnosti, v závislosti na C standardu ++ , definice je prohlášení. Přesto použití „deklarací a definic“, i když je formálně nesprávné, je běžné. Ačkoli všechny definice jsou deklarace, ne všechny deklarace jsou definice.

C příklady:

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 };

C ++ příklady:

int i2(0);
int j[2] = {rand(), k[0]};
MyClass* xox = new MyClass(0, "zaza");
point q = {0, i + 1};

Seznam inicializátorů

V C ++ může mít konstruktor třídy / struktury seznam inicializátorů v rámci definice, ale před tělem konstruktoru. Je důležité si uvědomit, že při použití inicializačního seznamu nejsou hodnoty přiřazeny proměnné. Jsou inicializovány. V níže uvedeném příkladu je 0 inicializováno na re a im. Příklad:

struct IntComplex {
  IntComplex() : re(0), im(0) {}

  int re;
  int im;
};

Tady je konstrukt  : re(0), im(0)seznam inicializátorů.

Někdy se termín „seznam inicializátorů“ používá také k označení seznamu výrazů v inicializátoru pole nebo struktury.

C ++ 11 poskytuje výkonnější koncept seznamů inicializátorů pomocí šablony s názvem std :: initializer_list .

Výchozí inicializace

Inicializace dat může nastat bez explicitní syntaxe v programu. Například pokud jsou statické proměnné deklarovány bez inicializátoru, pak jsou primitivní datové typy inicializovány s hodnotou nula odpovídajícího typu, zatímco statické objekty typu třídy jsou inicializovány pomocí svých výchozích konstruktorů .

Viz také

Reference