Печать неинициализированного значения bool с использованием cout (C++)
-
23-09-2019 - |
Вопрос
У меня есть класс с bool
элемент данных, который не инициализируется конструктором.Если я сделаю
cout << x.myBoolDataMember;
где x
является объектом этого класса, в котором bool
не был инициализирован, иногда я получаю случайное число, а не 0 или 1.(Я использую gcc
.) Соответствует ли такое поведение Standard
?
Решение
Соответствует ли такое поведение стандарту?
Да!Использование значений мусора (неинициализированных) в вашем коде вызывает Неопределенное поведение
Другие советы
Да.Неинициализированная переменная может иметь любое значение.
Если оператор «<<» не проверяет логическое значение, такое поведение является правильным.
Проблема здесь скрыта в самом bool:программа использует более одного бита для хранения bool.Это зависит от реализации.Иногда для хранения bool можно использовать только один бит.
Иногда больше, и это именно такой случай.