2010-01-28 12 views
8

Tengo una clase con un miembro de datos bool que no ha sido inicializado por el constructor. Si hagoImprimir un bool no inicializado usando cout (C++)

cout << x.myBoolDataMember; 

donde x Es un objeto de esta clase en la que el bool no se ha inicializado, a veces se produce un número aleatorio en lugar de 0 o 1. (estoy usando gcc.) ¿Es este comportamiento cumple con el Standard?

Respuesta

10

¿Este comportamiento cumple con la norma?

Sí! El uso de valores basura (no inicializados) en el código invoca Comportamiento no definido

4

Sí. Una variable no inicializada puede tener cualquier valor.

+0

Es difícil hablar de valores en presencia de un comportamiento indefinido. 'bool' solo tiene dos valores posibles,' falso' y 'verdadero'. El hecho de que 'cout << b' genere algo que no sea' 0' y '1' es una consecuencia del comportamiento no definido, no de' b' que tiene un "valor" distinto de 'false' o' true'. – avakar

+3

Es cierto. También podría imprimir nada en absoluto, 0.5, "azul", o emitir humo – MSalters

+1

Podrías convertirte en un gato. Los demonios podrían volar fuera de tu nariz. –

0

Tan pronto como el operador "< <" no verifica el bool, este comportamiento es correcto.
El problema aquí está oculto en el bool en sí: el programa usa más de un bit para almacenar el bool. Esto depende de la implementación. A veces, solo se puede usar un bit para almacenar el bool.
A veces más, y es un caso así.