99 votes

Initialisation des tableaux C++

Est-ce une façon d'initialiser un tableau à tous les 0 ?

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

Si oui, existe-t-il une syntaxe similaire pour d'autres types ? par exemple

bool myBoolArray[ARRAY_SIZE] = {false}

163voto

AndreyT Points 139512

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

Puisque cet initaliseur est universel, pour bool vous n'avez pas vraiment besoin d'une "syntaxe" différente. 0 fonctionne comme un initialisateur pour bool également, de sorte que

bool myBoolArray[ARRAY_SIZE] = { 0 };

est garanti pour initialiser le tableau entier avec false . Ainsi que

char* myPtrArray[ARRAY_SIZE] = { 0 };

en garantie d'initialiser l'ensemble du 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] = { NULL };

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

Cependant, en C++ = { 0 } peut ne pas fonctionner pour tous les types, comme les types d'énumération, par exemple, qui ne peuvent pas être initialisés avec des intégrales. 0 . C'est spécifiquement pour cette raison que le C++ supporte la forme la plus courte

T myArray[ARRAY_SIZE] = {};

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

21voto

incises Points 139

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

char myarray[ARRAY_SIZE] {0}

1voto

jasonline Points 2307

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

Pour les tableaux de classes, cependant, 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 initialisateurs doit être complète - c'est-à-dire qu'il doit y avoir un initialisateur pour chaque élément du tableau.

-2voto

ufukgun Points 2426

Oui

Je pense que cela devrait fonctionner, je n'ai pas essayé mais je crois que cela fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X