Вы отметили свой вопрос [C] и [C ++] одновременно. Результаты будут согласованы между языками, но структура ответа различна для каждого из этих языков.
На языке C ваши примеры не имеют никакого отношения к bool
(это относится и к C99). В языке C реляционные операторы не дают bool
результатов. И 4 > 5
, и 4 < 5
являются выражениями, которые производят результаты типа int
со значениями 0
или 1
. Таким образом, в ваших примерах на языке C. нет никакого «преобразования bool в int».
В C ++ реляционные операторы действительно дают bool
результаты. bool
значения могут быть преобразованы в тип int
, при этом true
преобразуется в 1
и false
преобразуется в 0
. Это гарантировано языком.
P.S. Язык C также имеет выделенный логический тип _Bool
(с псевдонимом макросов bool
), и его интегральные правила преобразования по существу такие же, как в C ++. Но, тем не менее, это не относится к вашим конкретным примерам в C. Еще раз, реляционные операторы в C всегда выдают результаты int
(не bool
) независимо от версии спецификации языка.