2010-01-28 4 views
8

У меня есть класс с элементом данных bool, который не инициализируется конструктором. Если яПечать неинициализированного bool с использованием cout (C++)

cout << x.myBoolDataMember; 

где x является объектом этого класса, в котором bool не был инициализирован, я иногда получаю случайное число, а не 0 или 1. (я использую gcc.) Является ли это поведение совместимый с Standard?

ответ

10

Соответствует ли это поведению стандарту?

Да! Использование значений мусора (неинициализированных) в вашем коде вызывает Неопределенное поведение

4

Да. Неинициализированная переменная может иметь любое значение.

+0

Трудно говорить о значениях при наличии неопределенного поведения. 'bool' имеет только два возможных значения:' false' и 'true'. Тот факт, что 'cout << b' выводит что-то, отличное от' 0' и '1', является следствием не определяемого поведения, а не' b', имеющего значение, отличное от 'false' или' true'. – avakar

+3

Правда. Он также может ничего не печатать, 0,5, «синий» или испускать дым. – MSalters

+1

Вы можете превратиться в кошку. Демоны могли вылететь из вашего носа. –

0

Как только «< <» оператор не проверяет bool, это поведение верное.
Проблема здесь скрыта в самом bool: программа использует более одного бита для хранения bool. Это зависит от реализации. Иногда для хранения bool может использоваться только один бит.
Иногда больше, и это такой случай.

Смежные вопросы