web-dev-qa-db-fra.com

Initialisation de tableau C++

est cette forme d'initialisation d'un tableau à tous les 0 

char myarray[ARRAY_SIZE] = {0} soutenu par tous les compilateurs? , 

si oui, y a-t-il une syntaxe similaire à celle des autres types? par exemple 

bool myBoolArray[ARRAY_SIZE] = {false} 
72
Eli

Oui, cette forme d'initialisation est prise en charge par tous les compilateurs C++. C'est une partie du langage C++. En fait, c'est un idiome qui est venu en C++ à partir du langage C. En langage C, = { 0 } est un idiomatique initialisateur de zéro universel . C'est aussi presque le cas en C++.

Comme cet initalizer est universel, pour le tableau bool, vous n'avez pas vraiment besoin d'une "syntaxe" différente. 0 fonctionne également comme initialiseur pour le type bool, donc

bool myBoolArray[ARRAY_SIZE] = { 0 };

est garanti pour initialiser le tableau entier avec false. Aussi bien que

char* myPtrArray[ARRAY_SIZE] = { 0 };

in garantit d'initialiser tout le tableau avec des pointeurs nuls de type char *

Si vous pensez que cela améliore la lisibilité, vous pouvez certainement utiliser

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

mais le fait est que la variante = { 0 } vous donne exactement le même résultat.

Cependant, en C++, = { 0 } peut ne pas fonctionner pour tous les types, tels que les types enum, par exemple, qui ne peuvent pas être initialisés avec intégrale 0. Mais C++ supporte la forme plus courte

T myArray[ARRAY_SIZE] = {};

c'est-à-dire juste une paire vide de {}. Cela initialisera par défaut un tableau de tout type (en supposant que les éléments permettent l’initialisation par défaut), ce qui signifie que pour les types de base (scalaires), tout le tableau sera correctement initialisé à zéro. 

126
AnT

Notez que le '=' est facultatif dans la syntaxe d'initialisation universelle C++ 11 et que son style est généralement considéré comme meilleur:

char myarray[ARRAY_SIZE] {0}
16
incises

Vous pouvez déclarer le tableau en C++ de cette manière: . Si vous connaissez la taille du tableau, vous devez le déclarer pour: Entier: int myArray[array_size]; Double: double myArray[array_size]; Char et string: char myStringArray[array_size]; La différence entre char et string est la suivante

char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";

Si vous ne connaissez pas la taille du tableau, vous devriez laisser le tableau vide comme suit.

entier: int myArray[array_size];

Double: double myArray[array_size];

0
Tabish

Oui, je pense que cela devrait fonctionner et qu'il peut également être appliqué à d'autres types de données.

Cependant, pour les tableaux de classes, s'il y a moins d'éléments dans la liste d'initialisation que d'éléments dans le tableau, le constructeur par défaut est utilisé pour les éléments restants. Si aucun constructeur par défaut n'est défini pour la classe, la liste des initialiseurs doit être complète. En d'autres termes, il doit y avoir un initialiseur pour chaque élément du tableau.

0
jasonline