Você marcou sua pergunta [C] e [C ++] ao mesmo tempo. Os resultados serão consistentes entre os idiomas, mas a estrutura da resposta é diferente para cada um desses idiomas.
Na linguagem C, seus exemplos não têm relação bool
alguma (isso também se aplica a C99). Na linguagem C, os operadores relacionais não produzem bool
resultados. Ambas 4 > 5
e 4 < 5
são expressões que produzem resultados do tipo int
com valores 0
ou1
. Portanto, não há nenhum tipo de "conversão de bool para int" ocorrendo nos seus exemplos em C.
No C ++, os operadores relacionais realmente produzem bool
resultados. bool
os valores são conversíveis em int
tipo, com true
conversão para 1
e false
conversão para0
. Isso é garantido pelo idioma.
A linguagem PS C também possui um tipo booleano dedicado _Bool
(com alias de macro como bool
) e suas regras de conversão integrais são essencialmente as mesmas que em C ++. Mas, no entanto, isso não é relevante para seus exemplos específicos em C. Mais uma vez, os operadores relacionais em C sempre produzem int
(não bool
) resultados, independentemente da versão da especificação da linguagem.
assert(x!=0)
. Mesmo que bool (true) converta portável em int (1), o "not false" afirma tem uma expressão mais legível.