2010-06-16 5 views

Répondre

12

Il est un initialiseur (paramètre constructeur). L'int nouvellement créé aura la valeur 0.

+6

C'est un initialiseur. Mais ce n'est pas un paramètre constructeur. Le type 'int' n'a pas de constructeur. – AnT

+1

@AndreyT: Pourriez-vous s'il vous plaît expliquer? Si constructeur prend un argument, alors comment serait-il différencié de l'initialiseur? Quelle est la différence entre ces deux-là? – understack

+6

@understack: "Constructeur" est une fonction membre spéciale présente dans les types * class *. Les types non-classe (comme 'int') n'ont pas de fonctions membres et, bien sûr, n'ont aucun constructeur. Le processus que vous traitez ici est appelé * initialisation *. L'initialisation est un concept non trivial, elle est définie différemment pour différents types. Pour les types de classe, l'initialisation est généralement (mais pas toujours) un appel de constructeur. Pour les types hors classe, l'initialisation est définie sans impliquer de "constructeurs" pour les raisons précitées. – AnT

7

Cela signifie que vous voulez un pointeur vers un int, et la valeur de cette int à 0.

Une fois, je perdais beaucoup trop longtemps sur un bug qui est avéré être quelqu'un écrit new char(10) quand ils signifiaient new char[10] . Le compilateur fonctionnait bien, mais il causait d'importants problèmes de corruption, qui sont si difficiles à détecter. C'était il y a 10+ ans et nous n'avions pas les outils que nous avons maintenant. Je ne l'oublierai jamais.

-1

Pour moi, l'importance de 0 est aussi que quelqu'un dit,

Je veux délibérément que ce soit 0

plutôt que d'une « valeur par défaut » qui [modifier] en de nombreux cas est susceptible d'être aussi 0 dans de nombreux compiles de débogage sera réglé sur 0, mais dans la version compile sera souvent la valeur déjà présente dans la mémoire non initialisée.

+0

La valeur par défaut est juste "non initialisée", donc il n'y a pas de dire ce qui sera là. La plupart des implémentations n'initialisent pas la mémoire brute, allouée dynamiquement avant de le donner à vous (à l'exception des implémentations de débogage, dont certains utilisent des valeurs de drapeau pour vous aider à traquer les bugs). –

+0

Ooops, tout à fait raison, je pensais Int et d'autres classes comme bool ayant des valeurs par défaut comme fausse, me suis distrait. –

+0

En fait, oui, il y a une valeur par défaut - 'new new()' serait initialisé par la valeur. C'est seulement 'new int 'qui n'est pas initialisé. –

Questions connexes