Liés gcc documentation ne parle pas de la Partielle de l'Initialisation , il parle juste de (Complète)de l'Initialisation ou de ne Pas faire d'Initialisation.
Qu'est-ce que partielle de l'Initialisation?
Les normes ne définissent pas Partielle de l'initialisation des objets, soit il est de Terminer l'initialisation ou de la Non-initialisation. Partielle d'Initialisation est un non-standard de la terminologie qui désigne communément une situation où vous fournir des initialiseurs mais pas tous je.e: de moins en Moins les initialiseurs que la taille du tableau ou le nombre d'éléments de structure en cours d'initialisation.
Exemple:
int array[10] = {1,2}; //Case 1:Partial Initialization
Qu'est-ce que (Complète)de l'Initialisation ou de ne Pas faire d'Initialisation?
Initialisation des moyens fournissant une certaine valeur initiale de la variable en cours de création au moment même où il est en cours de création. c'est à dire: le même code de déclaration.
Exemple:
int array[10] = {0,1,2,3,4,5,6,7,8,9}; //Case 2:Complete Initialization
int array[10]; //Case 3:No Initialization
La cité le paragraphe décrit le comportement d' Case 3
.
Les règles concernant l'Initialisation Partielle(Case 1
) sont bien définies par les normes et ces règles ne dépendent pas du type de stockage de la variable en cours d'initialisation.
Autant que je sache, Tous les compilateurs ont 100% de conformité à ces règles.
Quelqu'un peut-il me dire en quoi le C et le C++ normes de dire concernant partielle automatique de la structure et automatique de l'initialisation de tableau?
Le C et le C++ normes garantissent que même si un tableau d'entiers est situé sur le stockage automatique et si il y a moins d'initialiseurs dans un corset-ci-joint la liste puis le non initialisée éléments doit être initialisé à l' 0
.
Standard C99 6.7.8.21
Si il y a moins d'initialiseurs dans un corset-ci-joint la liste qu'il y a des éléments ou des membres d'un agrégat, ou moins de caractères dans une chaîne littérale utilisée pour initialiser un tableau de taille connue qu'il y a d'éléments dans le tableau, le reste de la somme doit être initialisé implicitement le même que les objets qui ont statique de la durée de stockage.
En C++, les règles sont établies avec un peu de différence.
C++03 Standard 8.5.1 Agrégats
Paragraphe 7:
Si il y a moins d'initialiseurs dans la liste qu'il y a de membres dans l'ensemble, chaque membre n'est pas explicitement initialisée est la valeur initialisée (8.5).
[Exemple:
struct S { int a; char* b; int c; };
S ss = { 1, "asdf" };
initialise ss.a
avec 1
, ss.b
avec "asdf"
, et ss.c
de la valeur d'une expression de la forme int()
, qui est,0
. ]
Alors que la Valeur d'Initialisation est défini dans la
C++03 8.5 Initialiseurs
Paragraphe 5:
À la valeur d'initialiser un objet de type T signifie:
- si T est un type de classe (clause 9) avec un utilisateur déclaré par le constructeur (12.1), puis le constructeur par défaut pour T est appelé (et l'initialisation est mal formé, si T n'a pas de accessible
le constructeur par défaut);
- si T est une non-union type de classe sans un utilisateur déclaré par le constructeur, puis tous les non-statique
membre des données et de la classe de base de la composante de T est la valeur initialisée;
- si T est de type tableau, chaque élément est la valeur initialisée;
- sinon, l'objet est initialisé à zéro