Использование типа int
для значений false
и true
приводит их в соответствие с типом и набором значений, полученных в результате оператора логического отрицания (!
), реляционных операторов (<
, >
, <=
, >=
), операторы равенства (==
, !=
), логический оператор AND (&&
) и логический оператор OR (||
), все из которых производятзначение 0 или 1 типа int
.
Кроме того, если true
определено как 1u
, тогда int minust = -true;
инициализирует minust
значением, определяемым реализацией (или повысит реализацию-определенный сигнал) вместо инициализации minust
значением -1
. Компилятор может выдать предупреждение. Это потому, что 1u
имеет тип unsigned int
, -1u
имеет значение UINT_MAX
, а UINT_MAX
не может быть представлен int
.
Я понимаю, что аргумент -true
немного слаб. Я пытаюсь объяснить, что определение констант false
и true
для типа unsigned int
, а не типа чисто числовых значений 0 и 1 (то есть int
), наложит ограничения(необоснованные ограничения, на мой взгляд) того, что вы можете сделать с этими константами.