Solución:
bool
es un tipo C ++ incorporado mientras BOOL
es un tipo específico de Microsoft que se define como un int
. Lo puedes encontrar en windef.h
:
typedef int BOOL;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
Los valores de un bool
están true
y false
, mientras que para BOOL
puedes usar cualquier int
valor, aunque TRUE
y FALSE
las macros se definen en el windef.h
encabezamiento.
Esto significa que el sizeof
el operador producirá 1 para bool
(el estándar establece, sin embargo, que el tamaño de bool
está definida por la implementación), y 4 para BOOL
.
Fuente: artículo de Codeguru
La API de Windows tenía este tipo antes bool
fue lanzado a C ++. Y es por eso que todavía existe en todas las funciones de Windows que toman BOOL. C no es compatible bool
tipo de datos, por lo tanto BOOL
tiene que quedarse.
Para agregar a lo que ha dicho luvieere, puede devolver algo diferente a TRUE
o FALSE
de una función que devuelve un BOOL
p.ej,
BOOL myFunc(int a)
{
if (a < 3) return FALSE;
else if (a > 3) return TRUE;
else return 2;
}
Y esto es posible porque un BOOL
es esencialmente un int
.
Tenga en cuenta que esto no es aconsejable ya que destruye gravemente la legibilidad general del código, pero es algo que puede encontrar y se preguntará por qué es así.