Pourquoi les membres const doivent-ils être initialisés dans l’initialiseur du constructeur plutôt que dans son corps?

Pourquoi les membres de classe déclarés comme const doivent-ils être initialisés dans la liste d’initialisation du constructeur plutôt que dans le corps du constructeur?

Quelle est la différence entre les deux?

En C ++, un object est considéré comme complètement initialisé lorsque l’exécution entre dans le corps du constructeur.

Tu as dit:

“Je voulais savoir pourquoi const doit être initialisé dans la liste d’initialisation du constructeur plutôt que dans son corps?”

Ce qui vous manque, c’est que l’ initialisation se produit dans la liste d’initialisation et que l’ assignation se produit dans le corps du constructeur. Les étapes en logique:

1) Un object const peut uniquement être initialisé.

2) Un object a tous ses membres initialisés dans la liste d’initialisation. Même si vous ne les initialisez pas explicitement, le compilateur le fera avec plaisir 🙂

3) Par conséquent, en mettant 1) et 2) ensemble, un membre qui est const ne peut jamais avoir une valeur à l’initialisation, ce qui se produit pendant la liste d’initialisation.

const variables const et référence doivent être initialisées sur la ligne déclarée.

  class Something { private: const int m_nValue; public: Something() { m_nValue = 5; } }; 

produirait un code équivalent à;

 const int nValue; // error, const vars must be assigned values immediately nValue = 5; 

L’affectation de valeurs de variables membres const ou référence dans le corps du constructeur ne suffit pas.

C ++ fournit un autre moyen d’initialiser les variables membres qui permet d’initialiser les variables membres lors de leur création plutôt que par la suite. Cela se fait en utilisant une liste d’initialisation.

Vous pouvez atsortingbuer des valeurs aux variables de deux manières: explicitement et implicitement: afficher la copie dans une copie du presse-papier?

 int nValue = 5; // explicit assignment double dValue(4.7); // implicit assignment 

L’utilisation d’une liste d’initialisation est très similaire à celle des affectations implicites.

Rappelez-vous que la liste d’initialisation des membres, utilisée pour initialiser les objects de données de base et membres, figure dans la définition et non dans la déclaration du constructeur.

Plus d’informations sur cpp-tutorial et Code Wrangler .

Parce que les variables constantes et les références doivent être initialisées au moment de la déclaration, c’est-à-dire avant l’utilisation. Mais les constructeurs atsortingbueront une valeur à un variable non initialisable de la variable, vous devez donc utiliser la liste d’initialisation pour la constante et les références.