In informatica, e in particolare nella fase di programmazione, l'inizializzazione consiste nell'assegnazione di un valore iniziale per un oggetto dati o una variabile. Il modo in cui viene eseguita l'inizializzazione dipende dal linguaggio di programmazione, nonché dal tipo, dalla classe di archiviazione e così via, di un oggetto da inizializzare. I costrutti di programmazione che eseguono l'inizializzazione sono in genere chiamati inizializzatori e liste di inizializzatori. L'inizializzazione è diversa (e preceduta) dalla dichiarazione, sebbene le due possano talvolta essere confuse nella pratica. La procedure complementare dell'inizializzazione è la finalizzazione, che viene utilizzata principalmente per gli oggetti, ma non per le variabili.

L'inizializzazione viene eseguita incorporando staticamente il valore in fase di compilazione oppure mediante assegnazione in fase di esecuzione. Una sezione di codice che esegue tale inizializzazione è generalmente nota come "codice di inizializzazione" e può includere altre funzionalità una tantum come l'apertura di file; nella programmazione orientata agli oggetti, il codice di inizializzazione può essere parte di un costruttore (metodo di classe) o di un inizializzatore (metodo di istanza). L'impostazione di una locazione di memoria con zeri esadecimali è anche nota come "cancellazione" e viene spesso eseguita da un'istruzione logica or esclusiva (entrambi gli operandi che specificano la stessa variabile), a livello di codice macchina, poiché non richiede ulteriori accessi alla memoria.

Linguaggi C-Style modifica

Inizializzatore modifica

In C/C99/C++, un inizializzatore è una parte facoltativa di un dichiaratore. È costituito dal carattere = seguito da un'espressione o da un elenco di espressioni separate da virgole racchiuse tra parentesi graffe. Quest'ultimo elenco è talvolta chiamato "lista di inizializzatori" o "lista di inizializzazione" (sebbene il termine "lista di inizializzatori" sia formalmente riservato all'inizializzazione dei membri di classe/struct in C++; vedere la sezione relativa). Una dichiarazione che crea un oggetto contenente dati, invece di limitarsi a descriverne l'esistenza, è comunemente chiamata definizione.

Molti trovano conveniente fare una distinzione tra i termini "dichiarazione" e "definizione", come nella frase comunemente vista "la distinzione tra una dichiarazione e definizione ...", il che implica che una dichiarazione designa semplicemente un oggetto dati (o una funzione). Infatti, secondo lo standard C++, una definizione è una dichiarazione. Tuttavia, l'uso di "dichiarazioni e definizioni", sebbene formalmente scorretto, è comune.[1] È importante notare che sebbene tutte le definizioni siano dichiarazioni, non tutte le dichiarazioni sono definizioni.

Esempi C modifica

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

Esempi C++ modifica

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

Lista di inizializzatori modifica

In C++, un costruttore di una classe/struct può avere un lista di inizializzatori all'interno della definizione ma prima del corpo del costruttore. È importante notare che quando si utilizza un elenco di inizializzazione, i valori non vengono assegnati alla variabile, poiché essi vengono inizializzati. Nell'esempio seguente, 0 viene inizializzato in re e im. Esempio:

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

  int re;
  int im;
};

Qui il costrutto  : re(0), im(0) costituisce l'elenco degli inizializzatori.

A volte il termine "lista di inizializzatori" viene utilizzato anche per fare riferimento all'elenco di espressioni nell'array o nell'inizializzatore della struttura struct.

C++11 fornisce un concetto più potente delle liste di inizializzatori, per mezzo di un template, chiamato std::initializer_list.

Inizializzazione predefinita modifica

L'inizializzazione dei dati può avvenire senza sintassi esplicita in un programma per farlo. Ad esempio, se le variabili statiche vengono dichiarate senza un inizializzatore, allora quelle dei tipi di dati primitivi vengono inizializzate con il valore zero del tipo corrispondente, mentre gli oggetti statici di tipo classe vengono inizializzati con i loro costruttori predefiniti.

Note modifica

  1. ^ Marshall P. Cline, Greg A. Lomow e Mike Girou, C++ FAQs, Addison-Wesley, 1999, ISBN 0-201-30983-1.

Voci correlate modifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica