C'est en fait très simple. Les membres de classe/struct peuvent inclure des objets avec des constructeurs par défaut, mais s'ils ne le font pas, et que vous ne leur donnez pas de valeur dans la liste des initialiseurs, vous ne les placez pas dans le corps du constructeur. occuper - tout ce qui leur a été enlevé de la pile ou du tas - aura toujours de vieilles ordures, c'est-à-dire une valeur indéterminée.
Considérez:
struct X
{
X() : x1(1) { x2 = 2; }
double x1, x2, x3;
std::string x4;
};
Ici, x1
et x2
sont initialisés explicitement par le constructeur de X
et x4
- être un std::string
- cependant, est par défaut construit pour être ""/longueur 0. , pourrait être quelque chose - et ne devrait pas être lu avant d'avoir été défini (c'est un comportement indéfini et peut vraiment mordre sur certains systèmes - considérez que le motif binaire de la mémoire qu'il occupe peut même ne pas être une valeur valide pour un double de cela pourrait déclencher une exception/interruption/interruption du processeur).
Je n'ai pas de copie de C++ 03. D'où puis-je l'obtenir? – Bazinga
IOW dans le fragment "ni initialisé lors de l'exécution du corps du constructeur", la norme C++ 03 utilise le mot "initialisé" de manière informelle pour signifier "assigné une valeur". –
@Bazinga: Vous ne pouvez pas l'obtenir gratuitement. –