52 votes

Le type bool C/C++ est-il toujours garanti d'être 0 ou 1 lorsqu'il est transtypé en int ?

De nombreux compilateurs semblent ne garder que 0 ou 1 dans les valeurs booléennes, mais je ne suis pas sûr que cela fonctionnera toujours :

 int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?

18voto

Prasoon Saurav Points 47488

Est-ce que C/C++ .......

Il n'y a pas de langage nommé C/C++.

le type bool est toujours garanti à 0 ou 1 lorsqu'il est transtypé en int?

En C++ oui car la section $4.5/4 dit

Une rvalue de type bool peut être convertie en une rvalue de type int, false devenant zéro et true devenant un.

.

int c = 3 + b; // 4 ou 5 ?

La valeur de c sera 4

10voto

Alex Che Points 822

Un autre exemple lorsque vous êtes hors du bateau sûr :

   bool b = false;
  *(reinterpret_cast<char*>(&b)) = 0xFF;
  int from_bool = b;
  cout << from_bool << " is " << (b ? "true" : "false");

Sortie (g++ (GCC) 4.4.7) :

   255 is true

A ajouter à l' exemple de FredOverflow .

3voto

hhafez Points 13240

Il n'y a pas de type bool en C avant C99 (comme C90), cependant le type bool en C99/C++ est toujours garanti comme étant 0 ou 1.

En C, toutes les opérations booléennes sont garanties de renvoyer 0 ou 1, que le type booléen soit défini ou non.

Donc a && b ou !a ou a || b renverra toujours 0 ou 1 en C ou C++ quel que soit le type de a et b .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X