Pourquoi faut-membres de la classe déclarée const
être initialisé dans le constructeur de l'initialiseur de la liste plutôt que dans le corps du constructeur?
Quelle est la différence entre les deux?
Pourquoi faut-membres de la classe déclarée const
être initialisé dans le constructeur de l'initialiseur de la liste plutôt que dans le corps du constructeur?
Quelle est la différence entre les deux?
En C++, un objet est considéré comme complètement initialisé lors de l'exécution pénètre dans le corps du constructeur.
Vous avez dit:
"je voulais savoir pourquoi const doit être initialisée dans le constructeur de l'initialiseur liste plutôt que dans son corps ?."
Ce qui vous manque, c'est que l'initialisation se passe dans la liste d'initialisation et affectation qui se passe dans le corps du constructeur. Les étapes de la logique:
1) const objet ne peuvent être consultés.
2) Un objet a l'ensemble de ses membres initialisé dans la liste d'initialisation. Même si vous n'avez pas explicitement initialiser là, le compilateur sera heureux de le faire pour vous :-)
3) par conséquent, en mettant 1) et 2), un membre qui est const ne peut jamais avoir une valeur qui lui est assignée lors de l'initialisation, qui se produit lors de l'initialisation de la liste.
const
et des valeurs de référence doit être initialisée sur la ligne, ils sont déclarés.
class Something
{
private:
const int m_nValue;
public:
Something()
{
m_nValue = 5;
}
};
serait de produire un code équivalent;
const int nValue; // error, const vars must be assigned values immediately
nValue = 5;
L'attribution const ou membre de référence valeurs de variables dans le corps du constructeur n'est pas suffisant.
C++ offre un autre moyen de l'initialisation des variables de membre permet d'initialiser les variables de membre lorsqu'ils sont créés plutôt que par la suite. Ceci est fait grâce à l'utilisation d'une liste d'initialisation.
Vous pouvez affecter des valeurs à des variables de deux façons: de manière explicite et implicite: vue plaincopy à clipboardprint?
int nValue = 5; // explicit assignment
double dValue(4.7); // implicit assignment
À l'aide d'une liste d'initialisation est très similaire à ce implicite des affectations.
Rappelez-vous que la liste d'initialisation de membre, utilisé pour initialiser la base et des données sur les membres des objets, est dans la définition, la non déclaration du constructeur.
Plus sur le rpc-tutoriel et Code Wrangler.
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.