Inicjalizacja (programowanie) - Initialization (programming)

W programowania , inicjalizacja (lub inicjowanie) jest przyporządkowanie początkowej wartości dla obiektu danych lub zmienne. Sposób wykonania inicjalizacji zależy od języka programowania , typu, klasy pamięci itp. inicjowanego obiektu. Konstrukcje programistyczne, które wykonują inicjalizację, są zwykle nazywane inicjatorami i listami inicjalizatora . Inicjalizacja różni się od (i poprzedzona) deklaracją , chociaż w praktyce te dwie rzeczy można czasem ze sobą łączyć. Uzupełnieniem inicjalizacji jest finalization , który jest używany głównie dla obiektów, ale nie zmiennych.

Inicjowanie odbywa się albo przez statyczne osadzenie wartości w czasie kompilacji, albo przez przypisanie w czasie wykonywania . Sekcja kodu, która wykonuje taką inicjalizację, jest ogólnie znana jako „kod inicjujący” i może zawierać inne, jednorazowe funkcje, takie jak otwieranie plików; w programowaniu obiektowym kod inicjujący może być częścią konstruktora (metoda klasy) lub inicjatora (metoda instancji). Ustawienie lokalizacji pamięci na szesnastkowe zera jest również czasami nazywane „czyszczeniem” i jest często wykonywane przez wyłączną lub instrukcję (oba argumenty określające tę samą zmienną) na poziomie kodu maszynowego , ponieważ nie wymaga dodatkowego dostępu do pamięci.

C rodzina języków

Inicjator

W C/C99/C++ inicjator jest opcjonalną częścią deklaratora . Składa się ze znaku „=”, po którym następuje wyrażenie lub lista oddzielonych przecinkami wyrażeń umieszczonych w nawiasach klamrowych. Ta ostatnia lista jest czasami nazywana „listą inicjatorów” lub „listą inicjalizacji” (chociaż termin „lista inicjatorów” jest formalnie zarezerwowany dla inicjalizacji elementów członkowskich klasy/struktury w C++; patrz poniżej ). Deklaracja, która tworzy obiekt danych, zamiast jedynie opisywać jego istnienie, nazywana jest potocznie definicją .

Wielu uważa, że ​​wygodnie jest rozróżnić terminy „deklaracja” i „definicja”, jak w powszechnie widzianym wyrażeniu „rozróżnienie między deklaracją a definicją …”, co oznacza, że ​​deklaracja oznacza jedynie obiekt danych (lub funkcję ). W rzeczywistości, zgodnie ze standardem C++ , definicja jest deklaracją. Mimo to użycie „deklaracji i definicji”, choć formalnie niepoprawne, jest powszechne. Chociaż wszystkie definicje są deklaracjami, nie wszystkie deklaracje są definicjami.

Przykłady C:

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

Przykłady C++:

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

Lista inicjatorów

W C++ konstruktor klasy/struktury może mieć listę inicjatorów w definicji, ale przed treścią konstruktora. Należy zauważyć, że w przypadku korzystania z listy inicjalizacyjnej wartości nie są przypisywane do zmiennej. Są inicjowane. W poniższym przykładzie 0 jest inicjowane na re i im. Przykład:

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

  int re;
  int im;
};

Tutaj konstrukcja  : re(0), im(0)jest listą inicjującą.

Czasami termin „lista inicjatorów” jest również używany w odniesieniu do listy wyrażeń w tablicy lub inicjatorze struktury.

C++11 zapewnia bardziej zaawansowaną koncepcję list inicjujących za pomocą szablonu o nazwie std::initializer_list .

Domyślna inicjalizacja

Inicjalizacja danych może nastąpić bez wyraźnej składni w programie, aby to zrobić. Na przykład, jeśli zmienne statyczne są zadeklarowane bez inicjatora, te z pierwotnych typów danych są inicjowane z wartością zero odpowiedniego typu, podczas gdy obiekty statyczne typu klasy są inicjowane przy użyciu ich domyślnych konstruktorów .

Zobacz też

Bibliografia