Casting int to bool en C / C ++
Sé que en C y C ++, cuando lanzo bools a ints,(int)true == 1
y(int)false == 0
. Me pregunto acerca de lanzar en la dirección inversa ...
En el código a continuación, todas las siguientes afirmaciones me resultaron verdaderas en archivos .c compilados con Visual Studio 2013 y Keil µVision 5. Aviso(bool)2 == true
.
¿Qué dicen los estándares C y C ++ sobre la conversión de enteros distintos de cero a bools? ¿Se especifica este comportamiento? Por favor incluya citas.
#include <stdbool.h>
#include <assert.h>
void TestBoolCast(void)
{
int i0 = 0, i1 = 1, i2 = 2;
assert((bool)i0 == false);
assert((bool)i1 == true);
assert((bool)i2 == true);
assert(!!i0 == false);
assert(!!i1 == true);
assert(!!i2 == true);
}
No un duplicado de¿Puedo suponer (bool) true == (int) 1 para cualquier compilador de C ++?:
Fundición en la dirección inversa (int -> bool).No hay discusión allí de valores distintos de cero.