2010-01-28 7 views
8

j'ai une classe d'un élément de données bool qui est non initialisé par le constructeur. Si jeImpression d'une bool non initialisée en utilisant Cout (C++)

cout << x.myBoolDataMember; 

x est un objet de cette classe dans laquelle le bool n'a pas été initialisé, je reçois parfois un nombre aléatoire plutôt que 0 ou 1. (j'utilise gcc.) Est-ce comportement compatible avec le Standard?

Répondre

10

Est-ce un comportement conforme à la norme?

Oui! Utilisation des valeurs de mémoire (non initialisées) dans votre code invoque Comportement indéfini

4

Oui. Une variable non initialisée peut avoir n'importe quelle valeur.

+0

Il est difficile de parler de valeurs en présence d'un comportement indéfini. 'bool' n'a que deux valeurs possibles,' false' et 'true'. Le fait que 'cout << b' renvoie autre chose que' 0' et '1' est une conséquence du fait que le comportement n'est pas défini, pas que' b' ait une "valeur" autre que 'false' ou 'true'. – avakar

+3

True. Il pourrait également imprimer rien du tout, 0,5, "bleu", ou émettre de la fumée – MSalters

+1

Vous pourriez transformer en un chat. Les démons peuvent voler hors de votre nez. –

0

Dès que l'opérateur "< <" ne vérifie pas le booléen, ce comportement est correct.
Le problème ici est caché dans la booléenne elle-même: le programme utilise plus d'un bit pour stocker le booléen. Cela dépend de la mise en œuvre. Parfois, un seul bit peut être utilisé pour stocker le booléen.
Parfois plus, et c'est un tel cas.