Etiquetó su pregunta [C] y [C ++] al mismo tiempo. Los resultados serán consistentes entre los idiomas, pero la estructura de la respuesta es diferente para cada uno de estos idiomas.
En lenguaje C, sus ejemplos no tienen ninguna relación con bool
eso (eso también se aplica a C99). En lenguaje C, los operadores relacionales no producen bool
resultados. Ambos 4 > 5
y 4 < 5
son expresiones que producen resultados de tipo int
con valores 0
o 1
. Por lo tanto, no hay "conversión de bool a int" de ningún tipo en sus ejemplos en C.
En C ++, los operadores relacionales sí producen bool
resultados. bool
los valores son convertibles a int
tipo, con true
conversión a 1
y false
conversión a 0
. Esto está garantizado por el idioma.
El lenguaje PS C también tiene un tipo booleano dedicado _Bool
(macro-alias como bool
), y sus reglas de conversión integral son esencialmente las mismas que en C ++. Sin embargo, esto no es relevante para sus ejemplos específicos en C. Una vez más, los operadores relacionales en C siempre producen int
(no bool
) resultados independientemente de la versión de la especificación del lenguaje.
assert(x!=0)
. Incluso si bool (true) convierte portable a int (1), las afirmaciones "no falsas" tienen una expresión más legible.