c++ - values - boolean variable
¿Es ''bool'' un tipo de datos básico en C++? (7)
C está destinado a ser un paso por encima del lenguaje ensamblador. La sentencia C if es en realidad solo azúcar sintáctica para "rama-si-cero", por lo que la idea de booleanos como un tipo de datos independiente era un concepto extraño en ese momento. (1)
Incluso ahora, los booleanos de C / C ++ suelen ser poco más que un alias para un tipo de datos de un solo byte. Como tal, es realmente más una etiqueta de propósito que un tipo de datos independiente.
(1) Por supuesto, los compiladores modernos son un poco más avanzados en el manejo de sentencias if. Esto es desde el punto de vista de C como un nuevo idioma.
Tengo esta duda mientras escribo un código. ¿Es ''bool'' un tipo de datos básico definido en el estándar de C ++ o es una especie de extensión proporcionada por el compilador? Tengo esta duda porque Win32 tiene ''BOOL'', que no es más que un typedef de largo. Además, ¿qué sucede si hago algo como esto?
int i = true;
¿Se garantiza "siempre" que la variable tendrá valor 1 o depende nuevamente del compilador que estoy usando? Además, para algunas API Win32 que aceptan BOOL como parámetro, ¿qué sucede si paso la variable bool?
Sí, bool es un tipo incorporado.
WIN32 es código C, no C ++, y C no tiene un bool, por lo que proporcionan su propio typedef BOOL.
sí, fue introducido en 1993.
para referencia adicional: tipo de datos booleano
Aunque ahora es un tipo nativo, todavía se define detrás de las escenas como un entero (int. Creo) donde el false
literal es 0 y true
es 1. Pero creo que toda la lógica todavía considera cualquier cosa menos 0 como verdadera, por lo que estrictamente hablando, la verdadera literal es probablemente una palabra clave para que el compilador pruebe si algo no es falso.
if(someval == true){
probablemente se traduce a:
if(someval !== false){ // e.g. someval !== 0
por el compilador
C ++ realiza muchos lanzamientos automáticos, es decir, si tiene una variable de tipo bool
y la pasa a algo que espera un int
, se convertirá en int
para usted: 0
para false
y 1
para true
.
No tengo mi estándar para ver si esto está garantizado, pero cada compilador que he usado hace esto (por lo que se puede suponer que siempre funcionará).
Sin embargo, confiar en esta conversión es una mala idea. El código puede detener la compilación si se agrega un nuevo método que sobrecarga la firma int
, etc.
bool es un tipo de datos fundamental en C ++. La conversión de true
a un tipo entero arrojará 1, y la conversión de false
dará 0 (4.5 / 4 y 4.7 / 4). En C, hasta C99, no había ningún tipo de datos bool, y la gente hacía cosas como
enum bool {
false, true
};
Lo mismo hizo la API de Windows. Comenzando con C99, tenemos _Bool
como un tipo de datos básico. Incluyendo stdbool.h
se typedef #define
que bool
y proporcionar las constantes true
y false
. No hicieron del bool un tipo de datos básico (y, por lo tanto, una palabra clave) debido a problemas de compatibilidad con el código existente.
El compilador Turbo c y c ++ no admite el tipo de datos booleano (palabra clave bool), pero el compilador dev c ++ admite el tipo de datos booleano (palabra clave bool).