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 à C++ du langage C. En langage C = { 0 }
est un idiomatique zéro-initialiseur universel. C'est aussi presque le cas en C++.
Depuis cette initalizer est universel, pour bool
tableau que vous avez vraiment pas besoin d'un autre « syntaxe ». 0
fonctionne comme un initialiseur pour le type bool
aussi bien, donc
bool myBoolArray[ARRAY_SIZE] = { 0 };
est garantie pour initialiser le tableau entier avec false
. En plus
char* myPtrArray[ARRAY_SIZE] = { 0 };
en garantie pour initialiser le tableau entier avec null-pointeurs de type char *
.
Si vous croyez améliore la lisibilité, vous pouvez certainement utiliser
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
mais le point est que = { 0 }
variante vous donne exactement le même résultat. Cependant, en C++ = { 0 }
peut ne pas fonctionner pour tous les types, comme les types enum, par exemple, qui ne peut pas être initialisé avec 0
intégral. Mais C++ prend la forme plus courte
T myArray[ARRAY_SIZE] = {};
à-dire juste une paire de {}
vide. Cela initialise par défaut un tableau de n'importe quel type (en supposant que les éléments autorisent l'initialisation par défaut), ce qui signifie que pour les types basiques (scalaires), le tableau entier sera correctement initialisé à zéro.
Je parie que l'argent 'false' est le même que '0' (sinon' si (false) 'n'évaluer false), donc ce que vous Je vais probablement travailler sur 99% des compilateurs. Je ne peux pas être sûr de l'autre 1% jusqu'à ce que nous citons la norme. –
Je sais que dans C, 'int a [10] = {1, 2, 3};' va mettre 'a [3] .. a [9]' '0', (" initialisé implicitement de la même façon que les objets qui ont une durée de stockage statique "). Cela est-il vrai pour C++? –
Oui, c'est le cas. Si elle n'était pas vraie pour C++ alors C++ ne serait même pas rétrocompatible avec C. –