25 votes

Que signifie "initialiser une valeur" ?

Duplicata possible :
Que signifient les expressions suivantes en C++ : initialisation par zéro, par défaut et par valeur ?

Si j'ai une classe par exemple :

class Info
{
   int x;
   int y;
};

que j'ai utilisé pour créer un objet,

Info *p = new Info();

Est-ce que les crochets à côté d'Info signifient que je l'initialise par valeur ? Quelle est la différence avec ceci, Info *p = new Info; ?

Je sais qu'il y a pregunta qui font la différence entre les différentes significations dans le nouveau et l'ancien langage C++, mais je veux connaître la différence sémantique entre l'initialisation par défaut et l'initialisation par valeur. Par exemple, est-ce que l'initialisation par valeur signifie initialiser quelque chose à zéro ?

35voto

Alok Save Points 115848

Une variable déclarée peut être Zéro initialisé , Valeur initialisée ou Initialisé par défaut .

Dans votre exemple :

Info *p = new Info();    <------- Value Initialization
Info *p = new Info;      <------- Default Initialization

La norme C++03 8.5/5 les définit avec justesse :

A zéro-initialisation un objet de type T signifie :

- si T est un type scalaire (3.9), l'objet prend la valeur de 0 (zéro) convertie en T ;
- si T est un type de classe non unitaire, chaque membre de données non statique et chaque sous-objet de classe de base
est initialisé à zéro ;
- si T est un type d'union, le premier membre de données nommé de l'objet est initialisé à zéro ;
- si T est un type tableau, chaque élément est initialisé à zéro ;
- si T est un type de référence, aucune initialisation n'est effectuée.

A initialisation par défaut un objet de type T signifie :
- si T est un type de classe non-POD (clause 9), le constructeur par défaut de T est appelé (et l'élément initialisation est mal formée si T n'a pas de constructeur par défaut accessible) ;
- si T est un type tableau, chaque élément est initialisé par défaut ;
- sinon, l'objet est réinitialisé à zéro.

A valeur-initialisation un objet de type T signifie :
- si T est un type de classe (clause 9) avec un constructeur déclaré par l'utilisateur (12.1), alors le constructeur par défaut de T est appelé (et l'initialisateur de T est appelé). de T est appelé (et l'initialisation est mal formée si T n'a pas de constructeur par défaut accessible). accessible) ;
- si T est un type de classe non syndiqué sans constructeur déclaré par l'utilisateur, alors tout type de classe non statique et composant de classe de base de T est initialisé par une valeur ;
- si T est un type tableau, alors chaque élément est initialisé par une valeur ;
- sinon, l'objet est initialisé zéro.

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