Initialisation (programmation) - Initialization (programming)

En programmation informatique , l' initialisation (ou initialisation) est l' attribution d'une valeur initiale à un objet de données ou à une variable. La manière dont l'initialisation est effectuée dépend du langage de programmation , ainsi que du type, de la classe de stockage, etc., d'un objet à initialiser. Les constructions de programmation qui effectuent l'initialisation sont généralement appelées initialiseurs et listes d'initialisation . L'initialisation est distincte de (et précédée) de declaration , bien que les deux puissent parfois être confondues dans la pratique. Le complément de l'initialisation est la finalisation , qui est principalement utilisé pour les objets, mais pas pour les variables.

L'initialisation se fait soit en incorporant statiquement la valeur au moment de la compilation, soit par affectation au moment de l'exécution . Une section de code qui effectue une telle initialisation est généralement connue sous le nom de « code d'initialisation » et peut inclure d'autres fonctions, à usage unique, telles que l'ouverture de fichiers ; en programmation orientée objet , le code d'initialisation peut faire partie d'un constructeur (méthode de classe) ou d'un initialiseur (méthode d'instance). La définition d'un emplacement mémoire sur des zéros hexadécimaux est également parfois appelée « effacement » et est souvent effectuée par une instruction exclusive ou (les deux opérandes spécifiant la même variable), au niveau du code machine , car elle ne nécessite aucun accès mémoire supplémentaire.

famille de langages C

Initialiseur

En C/C99/C++, un initialiseur est une partie facultative d'un déclarateur . Il se compose du caractère '=' suivi d'une expression ou d'une liste d'expressions séparées par des virgules placées entre accolades (accolades). Cette dernière liste est parfois appelée "liste d'initialisation" ou "liste d'initialisation" (bien que le terme "liste d'initialisation" soit formellement réservé à l'initialisation des membres de classe/struct en C++ ; voir ci-dessous ). Une déclaration qui crée un objet de données, au lieu de simplement décrire son existence, est communément appelée une définition .

Beaucoup trouvent commode d'établir une distinction entre les termes « déclaration » et « définition », comme dans l'expression courante « la distinction entre une déclaration et une définition ... », impliquant qu'une déclaration désigne simplement un objet de données (ou une fonction ). En fait, selon le standard C++ , une définition est une déclaration. Pourtant, l'usage « déclarations et définitions », bien que formellement incorrect, est courant. Bien que toutes les définitions soient des déclarations, toutes les déclarations ne sont pas des définitions.

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

Exemples C++ :

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

Liste d'initialisation

En C++, un constructeur d'une classe/struct peut avoir une liste d'initialiseurs dans la définition mais avant le corps du constructeur. Il est important de noter que lorsque vous utilisez une liste d'initialisation, les valeurs ne sont pas affectées à la variable. Ils sont initialisés. Dans l'exemple ci-dessous, 0 est initialisé dans re et im. Exemple:

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

  int re;
  int im;
};

Ici, la construction  : re(0), im(0)est la liste d'initialisation.

Parfois, le terme "liste d'initialisation" est également utilisé pour désigner la liste d'expressions dans l'initialiseur de tableau ou de structure.

C++11 fournit un concept plus puissant de listes d'initialisation , au moyen d'un modèle, appelé std::initializer_list .

Initialisation par défaut

L'initialisation des données peut se produire sans syntaxe explicite dans un programme pour le faire. Par exemple, si des variables statiques sont déclarées sans initialiseur, alors celles des types de données primitifs sont initialisées avec la valeur zéro du type correspondant, tandis que les objets statiques de type classe sont initialisés avec leurs constructeurs par défaut .

Voir également

Les références