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