4 ответов:
int x = 4<5;полностью портативный. Соответствующее стандартное.
booltointпреобразование является неявным!§4.7 / 4 из стандарта C++ говорит (Integral преобразование)
если тип источника-bool, то значение
falseпреобразуется в ноль и значениеtrueпреобразуется в один.
что касается C, насколько я знаю, нет
boolВ C. (до 1999 года) такbooltointпреобразование актуально только в C++. В C,4<5оценивает вintзначением, в этом случае значение1,4>5возвращает0.EDIT: Йенс в комментарии сказал, что C99 имеет
_Boolтип.boolэто макрос, определенный вstdbool.hзаголовочный файл.trueиfalseтакже макрос определен вstdbool.h.§7.16 из C99 говорит:
макрос
boolрасширяется _Тип bool.[..]
trueкоторый расширяется до целочисленной константы1,falseкоторый расширяется до целочисленной константы0, [..]
вы отметили свой вопрос [C] и [C++] одновременно. Результаты будут согласованы между языками, но структура ответа различна для каждого из этих языков.
в языке C ваши примеры не имеют никакого отношения к
boolЧто бы то ни было (это относится и к C99). В языке C реляционные операторы не производятboolрезультаты. Оба4 > 5и4 < 5- это выражения, которые дают результаты типаintзначения0или1. Таким образом, нет никакого "преобразования bool в int" любого рода, происходящего в ваших примерах В C.в C++ реляционные операторы действительно производят
boolрезультаты.boolзначения преобразуются вintтип, сtrueпреобразование1иfalseпреобразование0. Это гарантируется языком.П. С. Язык C также имеет специальный логический тип
_Bool(макро-псевдонимbool), и его неотъемлемые правила преобразования по сути то же самое, что и в C++. Но тем не менее это не относится к вашим конкретным примерам в C. Еще раз, реляционные операторы в C всегда производятint(неbool) результаты независимо от версии спецификации языка.
В разделе 6.5.8.6 стандарта C говорится:
каждый из операторов (больше), = (больше или равно) должен дать 1, если указано отношение истинно, и 0, если это ложный.) Результат имеет тип int.
там, кажется, нет никаких проблем, так как int в bool cast выполняется неявно. Это работает в компиляторе Microsoft Visual C++, GCC и Intel C++. Нет проблем ни в C, ни в C++.
Comments