17 votes

Initialisation par défaut des types POD en C++

Je sais que certains POD sont initialisées par défaut, mais d'autres ne le sont pas. (Les types de POD comprennent int , float les pointeurs, les unions, les tableaux de types POD, les structures de types POD, etc.)

Comment la portée et la classe de stockage affectent-elles l'initialisation par défaut des types POD ?

Plus précisément, lesquels des éléments suivants seront initialisés implicitement :

  • Variables locales avec stockage automatique
  • Variables locales statiques
  • Variables globales statiques
  • Variables externes
  • Variables allouées avec new
  • Membres POD d'une classe (sans initialisation explicite dans un constructeur)

Je sais qu'il existe des questions relatives à certaines de ces situations, mais aucune n'est exhaustive (elles ne traitent que de situations spécifiques).

11voto

Luchian Grigore Points 136646

Si nous ne parlons que des PODs, alors seulement statique locale et globale y variables externes parce qu'ils doivent être définis quelque part.

PODs attribués avec new sont également initialisés parfois - si vous rendez l'initialisation explicite :

int* x = new int();

créera un int initialisé à 0 con x pointant vers elle, alors que

int* x = new int;

aura x pointe vers un fichier non initialisé int .

Parfois - membres du groupe POD - ils peuvent être initialisés explicitement (sans être dans un constructeur) :

struct X
{
   int x;
};

X x;        //x.x is not initialized
X y = X();  //y.x is 0

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