Логические значения являются примитивными типами данных без значения по умолчанию. Ни один примитивный тип данных не имеет значения по умолчанию.
Кроме того, отсутствие инициализации объявленной переменной не обязательно делает ее значение случайным. Это зависит от того, имеет ли ваш тип данных конструктор по умолчанию (тот, который не принимает аргументов и неявно вызывается), который его инициализирует, или нет. Обычные старые типы данных (к которым относятся примитивные типы) имеют «пустой» конструктор по умолчанию, который не назначает никаких начальных значений. Напротив, типы типа std::string
имеют непустой конструктор по умолчанию, который инициализирует строку в четко определенное состояние.
В отличие от int
s и других примитивных типов, булевы значения имеют специальный оператор преобразования: чтобы преобразовать что-либо в bool
, сначала проверяется, является ли это значение 0
или нет, и в зависимости от В результате возвращается 0
или не 0
байт (как обычно, bool
s реализуются как байты). Я не уверен, существует ли хотя бы одно однобайтовое представление для true
, или является ли любой не 0
байт истинным логическим значением.