¿Puedo suponer (bool) verdadero == (int) 1 para cualquier comstackdor de C ++?

¿Puedo suponer (bool)true == (int)1 para cualquier comstackdor de C ++?

Sí. Los moldes son redundantes. En tu expresión:

 true == 1 

Se aplica promoción integral y el valor de bool se promocionará a int y esta promoción debe generar 1.

Referencia: 4.7 [conv.integral] / 4: si el tipo de fuente es booltrue se convierte en uno.

La respuesta de Charles Bailey es correcta. La redacción exacta del estándar de C ++ es (§4.7 / 4): “Si el tipo de fuente es bool, el valor falso se convierte en cero y el valor verdadero se convierte en uno”.

Editar: veo que también ha agregado la referencia; lo eliminaré en breve, si no me distraigo y olvido …

Edit2: Por otra parte, es probable que valga la pena señalar que mientras que los valores booleanos siempre convierten a cero o uno, varias funciones (especialmente de la biblioteca estándar C) devuelven valores que son “básicamente booleanos”, pero representados como int s que normalmente solo se requiere que sean cero para indicar falso o distinto de cero para indicar verdadero. Por ejemplo, las funciones is * en solo requieren cero o distinto de cero, no necesariamente cero o uno.

Si lanzas eso a bool , cero convertirá a falso, y no cero a verdadero (como es de esperar).

De acuerdo con el estándar, deberías estar seguro con esa suposición. El tipo C ++ bool tiene dos valores: true y false con los valores correspondientes 1 y 0.

Lo que hay que tener en cuenta es mezclar expresiones bool y variables con expresión BOOL y variables. Este último se define como FALSE = 0 y TRUE != FALSE , lo que a menudo en la práctica significa que cualquier valor diferente de 0 se considera TRUE .

Muchos comstackdores modernos emitirán una advertencia para cualquier código que implícitamente intente BOOL de BOOL a bool si el valor BOOL es diferente de 0 o 1.

He encontrado diferentes comstackdores que arrojan resultados diferentes en verdadero. También encontré que casi siempre es mejor comparar un bool con un bool en lugar de un int. Esos puntos tienden a cambiar de valor a medida que su progtwig evoluciona y si usted asume que son verdaderos como 1, puede ser mordido por un cambio no relacionado en otro lugar de su código.

No, TRUE puede ser arbitrario entre los comstackdores. Algunos usarán 1, algunos -1 (todos los bits configurados, var firmada), otros comstackdores pueden usar un valor diferente. Incluso si el valor está estandarizado, no todos los comstackdores pueden seguir el estándar.

FALSO, sin embargo, es cuando todos los bits son claros, lo que solo ocurre para el valor numérico 0.