#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'affecter0 code> à chaque élément manuellement. En savoir plus sur les tableaux iciMaintenant 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.