Почему приведение к bool ... с результатами (bool *) ...?
Поскольку поведение программы не определено.
Стандартговорит (цитируя последний черновик):
[basic.lval]
Если программа пытается получить доступ к сохраненному значению объекта через glvalue, тип которого не похож ([conv.qual]) к одному из следующих типов поведение не определено :
- динамический тип объекта,
- тип со знакомили тип unsigned, соответствующий динамическому типу объекта, или
- тип char, unsigned char или std :: byte.
bool
не похождля динамического типа buffer
, это не unsigned
и не unsigned
соответствующий тип, а также char
unsigned char
или std::byte
.Поэтому поведение не определено.
Почему приведение к bool с (char *) приводит к тому, что x равен 1
Поскольку первый байт a
содержит значениеэто не представляет ноль.Будет ли это так, зависит от архитектуры процессора.Порядок байтов целого числа определяется реализацией.
Обратите внимание, что в этом случае поведение будет хорошо определено, поскольку char
указано как одно из исключений в указанном правиле.