web-dev-qa-db-fra.com

Quelle est la valeur par défaut pour les membres de classe C ++

Quelles sont les valeurs par défaut pour les membres d'une structure et les membres d'une classe en c ++, et comment ces règles diffèrent-elles (par exemple, entre les classes/structures/primitives/etc)? Y a-t-il des circonstances où les règles concernant les valeurs par défaut diffèrent?

51
leeeroy

Il n'y a aucune différence entre les structures et les classes à cet égard en C++. Ils sont tous appelés juste types de classes.

Les membres des types de classe n'ont aucune valeur par défaut dans le cas général. Pour qu'un membre de la classe obtienne une valeur déterministe, elle doit être initialisée, ce qui peut être fait par

  • Constructeur par défaut du membre lui-même
  • Liste d'initialisation du constructeur de la classe englobante
  • Initialiseur explicitement spécifié pour l'objet de la classe englobante (qui inclut l'initialisation de la valeur et l'initialisation avec l'initialiseur agrégé).

De plus, tous les objets avec une durée de stockage statique sont initialisés à zéro au démarrage du programme.

Mis à part les cas ci-dessus, les membres de la classe, encore une fois, n'ont pas de valeurs par défaut et contiendront initialement des valeurs de déchets imprévisibles.

43
AnT

Ouais, il y en a un. Si vous initialisez un objet avec le constructeur par défaut et utilisez des parenthèses, les membres du POD seront initialisés à zéro:

someClass * p = new someClass();
15
Hans Passant