#include <iostream> using namespace std; int main() { int arr[10] = {}; for(auto element : arr) { cout<<element<<" "; } cout<<endl; } if i write int arr[10] = {}, the elements in arr are all 0. but if i just wrtie int arr[10], the elements in arr are random. So i am confused about int arr[10] = {}, i just declare a array int arr[10], but i don't give it any value, just a {}.
3 Réponses :
Si j'écris int Arr [10] = {}, les éléments in Arr sont tous 0. P> blockQuote>
C'est à quel point la syntaxe de la langue fonctionne. Dans votre cas, la matrice sera zéro initialisée. P>
mais si je viens de WRTIE INTRA [10], les éléments d'ARR sont aléatoires. P> blockQuote>
Dans vos éléments de matrice de cas ne sont pas initialisés. Vous ne devez pas lire des valeurs de variables qui ne sont pas initialisées; Sinon, vous déclencherez un comportement indéfini. P>
En réalité, int arr [10] = {}; code> valeur-initialise i>.
int arr [10]; code> est par défaut-initialiser i> ce qui signifie ne rien faire pour INT. (Voir [DCL.Init / 7])
Ne fonctionne-t-il que pour le type de base (int, flotteur, double)? Si je définis une classe personnalisée personne code>, est-ce que
personne arr [10] = {} code> fonctionne?
@Blackmamba Dans ce cas, l'instance de votre objet sera initialisée par défaut - quel que soit le moyen d'initialisation par défaut pour votre classe, AFaik.
@Giorgi Pour être plus précis, ils seront également valeur initialisée i>. Cela peut faire une différence dans certains cas.
@Blackmamba si personne code> a un constructeur, puis par défaut-initialiser i> signifie appeler ce constructeur pour initialiser une personne
code>
Selon le site Web de référence du CPP ( http://en.cppreference.com/w/ C / Langue / Array_initialisation ) Voici comment initialiser tous les éléments de réseau à zéro: p>
int a a [3] = {}; // Validité C ++ valide C ++ à zéro un tableau de saut de bloc-nœud p> blockQuote>
int arr [10]; code>
N'intriguez rien, il s'agit d'allouer des blocs de mémoire la taille d'un
int code> et que vous obtenez ce qui est dans cette mémoire. P>
int arr [10] = {}; code>
Initialisation de tous les blocs
int code> à NULL / 0 P>
Cela est vrai pour les types de construction tels que INT, mais la différence entre défaut et valeur initialisée pour les types avec des constructeurs est plus complexe.
@Martinbonner Mais il utilise un tableau Int dans l'exemple et demandant pourquoi il obtient toutes les données 0 ou aléatoires. Est-ce que je manque quelque chose? Je reçois ce que vous dites mais ne pensez pas que cela s'applique à la question. objet arr [10] = {} code> il suffit d'utiliser le constructeur par défaut de ces objets?
S'il y a un constructeur par défaut, objet arr [10] = {}; code> et
objet arr [10]; code> l'appellera tous les deux. Si c'est un type de pod, chaque objet sera initialisé à zéro dans le premier cas et à gauche indéterminé dans le second cas.
initialiser int blocs à NULL?
Il s'agit simplement d'un sucre syntaxique, dans de nombreuses situations, vous devez créer une éventail d'entiers initialisés avec des zéros, imaginez que la taille de la matrice est
1000 code> à la place, de côté que Sytax Seulement le seul moyen est de boucler la matrice et d'affecter
0 code> à chaque élément manuellement. En savoir plus sur les tableaux ici
Maintenant que vous avez une réponse, pour les coups de pied, supprimez le
= code> (mais gardez le
{} code>) et essayez-le à nouveau.
int arr [10] {}; code>
@WhozCraig Le résultat est
0 0 0 0 0 0 0 0 0 0 0 0 CODE>, le
= code> est peut-être inutile, quelle est la raison?
Cela gâcherait le plaisir. Faites de la chasse lorsque vous avez des temps libres et recherchez des questions plus connectées C ++ sur différentes méthodes d'initialisation i>. Et merci de l'essayer.