53 votes

Initialisation d'un tableau de zéros

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

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

Mais est-ce que cela (ci-dessous) est garanti ?

int C[5]= { }; // All entries set to zero

68voto

Bathsheba Points 23209

L'initialisation vide entre accolades effectue l'initialisation de l'agrégation du tableau : cela conduit à une initialisation nulle de l'élément int éléments.

Oui, c'est garanti.

35voto

songyuanyao Points 2265

Oui, selon la règle de initialisation de l'agrégat il est garanti (que tous les éléments du tableau C sera valeur initialisée c'est-à-dire zéro initialisé a 0 dans ce cas).

(c'est moi qui souligne)

Si le nombre de clauses initialisatrices est inférieur au nombre de membres and bases (since C++17) o la liste des initialisateurs est complètement vide les autres membres 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 aux règles habituelles d'initialisation des listes (qui effectue l'initialisation des valeurs pour les types non-classes et les classes non-agrégats avec des constructeurs par défaut, et l'initialisation des agrégats 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 A sera initialisé par défaut . Si A est un objet statique ou local au thread, les éléments seront zéro initialisé a 0 sinon rien n'est fait, ce seront des valeurs indéterminées.

3voto

rain_ Points 444

En fait, quand vous dites int A[5] = { 0 }; vous dites : Initialiser le premier élément à zéro. Toutes les autres positions sont initialisées à zéro à cause de l'inizialisation de l'agrégat.

Cette ligne est la véritable responsable du fait que votre tableau est rempli de zéros : int A[5] = { };

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

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