Nous avions une tâche pour notre classe où nous devions créer un jeu de tic-tac-toe . Les gens aiment se compliquer, alors ils ont écrit des jeux complexes qui comprenaient des menus. À la fin du jeu, vous deviez avoir la possibilité de rejouer ou de quitter le programme. J'ai utilisé une int
variable pour cela, mais j'ai remarqué que certains de mes camarades de classe utilisaient des BOOL.
Est-ce plus efficace? Quelle est la différence entre stocker une réponse qui ne devrait stocker que deux valeurs dans un int
plutôt que de le stocker dans un bool? Quel est le but exact de ces variables?
int
est de stocker un entier et le but d'unbool
est de stocker une valeur booléenne (true
oufalse
). L'utilisation d'unebool
OMI reflète son utilisation bien mieux que celle d'unint
.typedef int Bool
faisaient souvent pour préciser qu'ils utilisaient un booléen. C ++ a intégré le supportbool
dans le langage, tout comme C99 avec le_Bool
mot clé (plutôt laid) .bool
", mais de savoir pourquoi nous avons des noms différents pour des types similaires (commelength_t
) et pourquoi il est important que le compilateur vérifie les types.Réponses:
Lorsque vous choisissez des types et des noms de variable, vous voulez que votre intention soit aussi claire que possible. Si vous choisissez un type
bool
(booléen), il est clair qu'il n'y a que deux valeurs acceptables:true
oufalse
. Si vous utilisez un typeint
(entier), il n'est plus clair que l'intention de cette variable ne peut être que 1 ou 0 ou peu importe les valeurs que vous avez choisi de signifiertrue
etfalse
. Plussizeof(int)
retournera typiquement comme étant 4 octets, alors quesizeof(bool)
retournera 1.la source
Il semble que dans toutes les réponses recueillies (jusqu'à maintenant), personne n'ait compris le fait que le PO
BOOL
n'en parlait pasbool
.Puisque la question est étiquetée C ++, il convient de noter que:
int
est un nombre entier qui varie deINT_MIN
àINT_MAX
- macros définies dans les<climits>
valeurs qui dépendent de l'architecture de la machine hôte. En C ++, ces valeurs sont également accessibles en tant questd::numeric_limits<int>::min()
et...:max()
respectivement). Le comportement des opérateurs booléens appliqués àint
traiter0
comme faux et tout le reste comme vrai .BOOL
est juste un indice suggérant un comportement booléen pour un int. Il est défini dans<cstddef>
commeBOOL
n’est donc rien de plus que du sucre syntaxique, pour quoi, par le compilateur, ce n’est rien de plus qu’un int. C’est quelque chose que les programmeurs C utilisent, mais les programmeurs C ++ devraient éviter, puisque C ++ l’abool
.bool
est un type de langage intégral dont les valeurs supportées sont justestrue
etfalse
. Lorsque converti enint
true
devient 1 etfalse
devient 0.L'aspect important est qu'il est plus sûr contre les erreurs de programmation:
est impossible de coder avec le type bool approprié:
Utiliser
BOOL
au lieu debool
est simplement une mauvaise habitude héritée d'un passé glorieux que personne n'est encore capable d'oublier, ce qui crée un vieux problème pour un avenir moins glorieux.Les professeurs de langues devraient sérieusement y penser!
la source
Les types de booléens sont plus petits que les types Int, utilisez donc moins d'espace en mémoire. Selon le système que vous compilez / pour, un int peut comporter 4 à 8 octets, tandis qu'un booléen est un octet (comme on peut le voir dans cet article MSDN )
Ajoutez à cela quelques aspects de KISS et une bonne conception de programme. Vous comprendrez pourquoi il est préférable d'utiliser un bool pour stocker une variable qui n'aura jamais que 2 valeurs.
Pourquoi trop compliquer les choses avec un objet pouvant stocker une large gamme de valeurs, alors que vous êtes sûr de ne jamais avoir besoin de stocker qu'une seule de deux valeurs différentes?
Que se passe-t-il dans le système qui utilise un int si vous en stockez 75? Si vous avez ajouté des conditions supplémentaires
ou
alors vous êtes couvert pour cette situation. Mais si vous ne l'avez pas fait, alors vous ne l'êtes pas.
Vous pouvez également avoir un cas (en fonction de la façon dont vous modifiez la valeur de l'int) où vous avez un dépassement de tampon, et la valeur "réinitialisée" à 0 ou à la limite inférieure de votre int (qui peut se situer quelque part dans le région de -127 à −9,223,372,036,854,775,708, en fonction de votre architecture cible ) que se passe-t-il dans votre code alors?
Cependant, si vous utilisiez un bool, vous pourriez utiliser quelque chose comme ceci:
Ou même:
ou même:
Selon votre compilateur, il peut exister des optimisations qu'il peut effectuer sur du code utilisant Bools pour stocker des valeurs true / false mappées. Tandis que, il n’existera peut-être pas d’optimisations possibles pour Ints utilisé pour stocker les valeurs true / false mappées.
Nous devons également nous rappeler que le C ++ (avec C, Assembly et FORTRAN) est utilisé pour écrire du code très efficace, petit et rapide. Il serait donc préférable d’utiliser un booléen dans ce cas, surtout si vous utilisez des variables, de la mémoire, du cache ou du temps processeur.
Une question similaire serait: pourquoi devrais-je stocker un entier (valeur) dans un float? Réponse: Vous ne devriez pas, car cela ne sert à rien.
Longue histoire: En tant que professeur / tuteur / conférencier / professeur, il vous expliquera les tailles de différents types de valeur (au cas où vous l'auriez manquée) et leur importance dans le développement de logiciels.
J'espère que cela aide comme point de départ (j'espère aussi que cela ne semble pas aussi pédant)
la source
return value >= 0;
pour le premier exemple.Le but ici est la clarté de l'intention. Le type de retour fait partie d'une interface de fonctions et a
bool
vous en dit plus long sur ce à quoi vous pouvez vous attendre de la fonctionint
.Even
BOOL
est plus expressif queint
, même si c'est du même type, cela montre au moins votre intention.Cependant, aucun d’entre eux n’est ce que je recommanderais:
la source
En programmation, vous voulez représenter quelque chose de la vie réelle dans le code. Même si un int et bool peuvent faire la même chose, l’idée sous-jacente est complètement différente: lorsqu’on utilise un bool, la réponse peut être oui ou non; et c'est tout, c'est l'intention. Avec des nombres entiers, vous pouvez représenter des quantités sans point décimal. Et dans le même esprit, pourquoi choisiriez-vous un entier quand un double peut faire la même chose? Si un entier a plus de sens qu'un double lors de la modélisation du problème, vous pouvez choisir un entier.
la source
Parce que finalement, vous allez convertir votre entier en un booléen de toute façon: "if (i = 1) alors jouez un autre jeu". Dans cette situation, (i = 1) est converti en vrai ou en faux: un booléen.
la source
if (i = 1)
c'est probablement la très mauvaise chose à avoir dans son code.