Initialisation d'un tableau de zéros

Il est bien connu que les initialiseurs manquants pour un tableau de scalaires sont par défaut à zéro.

int A[5]; // Entries remain uninitialized
int B[5]= { 0 }; // All entries set to zero

Mais est-ce (ci-dessous) garanti ?

int C[5]= { }; // All entries set to zero
48
demandé sur songyuanyao 2016-08-11 12:30:19

3 réponses

L'initialisation étagée vide effectue l'agrégation-initialisation du tableau: cela conduit à l'initialisation zéro des éléments int.

Oui, c'est garanti.

63
répondu Bathsheba 2016-08-11 09:43:28

Oui, selon la règle de initialisation agrégée , Il est garanti (que tous les éléments du tableau {[1] } seront valeur initialisée , c'est-à-dire zéro initialisé à 0 dans ce cas).

(soulignement du mien)

Si le nombre de clauses d'initialisation est inférieur au nombre de membres and bases (since C++17) ou que la liste d'initialisation est complètement vide , les membres restants and bases (since C++17) sont initialisés by their default initializers, if provided in the class definition, and otherwise (since C++14) par des listes vides, conformément à la règles d'initialisation de liste habituelles (qui effectue une initialisation de valeur pour les types non-classes et les classes non-agrégées avec des constructeurs par défaut, et une initialisation d'agrégat pour les agrégats).


PS:

int A[5]; // Entries remain uninitialized

"rester non initialisé" pourrait ne pas être exact. Pour int A[5];, Tous les éléments de {[7] } seront initialisés par défaut . Si A est statique ou objet thread-local, les éléments seront zéro initialisé à 0, sinon rien n'est fait, ils indéterminée valeurs.

34
répondu songyuanyao 2016-08-17 08:01:16

, En fait, quand vous ditesint A[5] = { 0 }; vous dites: initialisez le premier élément à zéro. Toutes les autres positions sont initialisées à zéro en raison de l'inizialisation agrégée.

Cette ligne est le vrai responsable d'avoir votre tableau plein de zéros: int A[5] = { };

C'est pourquoi si vous utilisez int A[5] = { 1 }; vous n'aurez que la première position inizialized à 1.

2
répondu rain_ 2016-08-17 08:05:08