Tuvimos una tarea para nuestra clase donde tuvimos que crear un juego de tres en raya . A la gente le gusta complicarse, así que escribieron juegos complejos que incluían menús. Al final del juego, tenías que tener la opción de volver a jugar o salir del programa. intUsé una variable para eso, pero noté que algunos compañeros de clase usaban BOOL.
¿Es más eficiente? ¿Cuál es la diferencia entre almacenar una respuesta que solo debería almacenar dos valores en intlugar de almacenarla en un bool? ¿Cuál es el propósito exacto de estas variables?

intes almacenar un número entero y el propósito de abooles almacenar un valor booleano (trueofalse). Usar unboolIMO refleja su uso mucho mejor que usar unint.typedef int Boolhacían a menudo para dejar en claro que estaban usando un booleano. Compatibilidad integrada con C ++boolen el lenguaje, al igual que C99 con la_Boolpalabra clave (bastante fea) .bool", se trata de por qué tenemos diferentes nombres para tipos similares (comolength_t) y por qué es importante que el compilador verifique los tipos.Respuestas:
Al elegir tipos de variables y nombres de variables, desea que su intención sea lo más clara posible. Si elige un tipo
bool(booleano), está claro que solo hay dos valores aceptables:trueofalse. Si usa un tipoint(entero), ya no está claro que la intención de esa variable solo puede ser 1 o 0 o cualquier valor que elija significartrueyfalse. Plussizeof(int)normalmente devolverá como 4 bytes, mientrassizeof(bool)que devolverá 1.fuente
Al parecer, en todos los (hasta ahora) recogidos respuestas nadie captó el hecho de que el OP habló sobre
BOOLnobool.Dado que la pregunta está etiquetada como C ++, debe tenerse en cuenta que:
intes un número entero que varía deINT_MINaINT_MAX- macros definidos en<climits>cuyos valores dependen de la arquitectura de la máquina de alojamiento. En C ++ estos valores también son accesibles comostd::numeric_limits<int>::min()y...:max()respectivamente). El comportamiento de los operadores booleanos se aplica parainttratar0como falso y todo lo demás como verdadero .BOOLes solo una pista que sugiere un comportamiento booleano para un int. Se define<cstddef>comoBOOLno es más que azúcar sintáctica, por lo que, según el compilador, no es más que un int. Es algo que usan los programadores de C, pero los programadores de C ++ deben evitarlo, ya que C ++ lo ha hechobool.booles un tipo integral de lenguaje cuyos valores admitidos son justtrueyfalse. Cuando se convierte en seinttrueconvierte en 1 y sefalseconvierte en 0.El aspecto importante es que es más seguro contra errores de programación:
es imposible codificar con el tipo de bool apropiado:
Usar en
BOOLlugar debooles solo un mal hábito heredado de un pasado glorioso que nadie puede olvidar, creando así un viejo problema para un mañana menos glorioso.¡Los profesores de idiomas deberían pensarlo seriamente!
fuente
Los tipos de bool son más pequeños que los tipos Int, por lo tanto, utilizan menos espacio en la memoria. Dependiendo del sistema en el que esté compilando, un Int puede tener de 4 a 8 bytes, mientras que un Bool es de 1 byte (como se puede ver en este artículo de MSDN )
Combine esto con algunos de los aspectos de KISS y el buen diseño del programa, y se hace evidente por qué es mejor usar un bool para almacenar una variable que solo tendrá 2 valores.
¿Por qué complicar más las cosas con un objeto que puede almacenar una amplia gama de valores, cuando está seguro de que solo necesita almacenar 1 de 2 valores diferentes?
¿Qué sucede en el sistema que usa un int, si almacena 75 allí? Si ha agregado condicionales adicionales
o
entonces estás cubierto para esta situación. Pero si no lo has hecho, entonces no lo estás.
También podría tener un caso (dependiendo de cómo esté cambiando el valor de int) donde tiene un desbordamiento de búfer, y el valor "se restablece" de nuevo a 0 o el límite inferior de su int (que podría estar en algún lugar del región de -127 a −9,223,372,036,854,775,808, dependiendo de su arquitectura de destino ) ¿qué sucede en su código entonces?
Sin embargo, si usaste un bool, podrías usar algo como esto:
O incluso:
o incluso:
Dependiendo de su compilador, puede haber optimizaciones que se puede realizar en el código que utiliza para almacenar Bools asignan valores de verdadero / falso. Considerando que, tal vez no haya optimizaciones que se pueden realizar con Entrs utilizado para almacenar los valores verdadero / falso asignadas.
También debemos recordar que C ++ (junto con C, Assembly y FORTRAN) se usa para escribir código altamente eficiente, pequeño y rápido. Por lo tanto, sería mejor usar un Bool en este caso, especialmente si está marcado por el uso de variables, memoria, caché o tiempo de procesador.
Una pregunta similar sería: ¿por qué almacenaría un entero (valor) en un flotante? Respuesta: No deberías, porque no tiene sentido.
Larga historia corta: como su maestro / tutor / conferenciante / profesor para repasar los tamaños de los diferentes tipos de valor con usted (en caso de que se lo haya perdido) y por qué son importantes en el Desarrollo de software.
Espero que ayude como punto de partida (también espero que no parezca pedante)
fuente
return value >= 0;para el primer ejemplo.El propósito aquí es la claridad de la intención. El tipo de retorno es parte de una interfaz de funciones y un
boolle dice más sobre qué esperar de la función que un lointhace.Incluso
BOOLes más expresivo queint, aunque es del mismo tipo, al menos muestra tu intención.Sin embargo, ninguno de ellos es lo que recomendaría:
fuente
En programación, quieres representar algo de la vida real en código. A pesar de que int y bool pueden hacer lo mismo, la idea subyacente es completamente diferente: cuando se usa un bool, la respuesta puede ser sí o no; y eso es todo, esa es la intención. Con enteros puede representar cantidades sin punto decimal. Y en ese mismo espíritu, ¿por qué elegirías un número entero cuando un doble puede hacer lo mismo? Si un número entero tiene más sentido que un doble al modelar el problema, entonces puede elegir un int.
fuente
Porque al final, vas a convertir tu número entero a booleano de todos modos: "si (i = 1) entonces juegas otro juego". En esta situación (i = 1) se convierte en verdadero o falso: un booleano.
fuente
if (i = 1)es probablemente el muy mal que hay que tener en el código de uno.