En C ++, je me demande pourquoi le type booléen a une longueur de 8 bits (sur mon système), où un seul bit suffit pour contenir la valeur booléenne?
J'avais l'habitude de croire que c'était pour des raisons de performances, mais alors sur une machine 32 bits ou 64 bits, où les registres ont une largeur de 32 ou 64 bits, quel est l'avantage des performances?
Ou est-ce juste une de ces raisons «historiques»?
sizeof(bool)
serait 4. Je pourrais jurer que msvc avait des booléens 32 bits, mais j'ai juste essayé et ce n'est pas le cas.
vector<bool>
n'est pas qu'il essaie d'être intelligent et de regrouper les booléens en bits, mais qu'il essaie de le faire et de se déguiser en conteneur STL . Un ensemble de bits simple aurait été bien tant qu'il ne prétend pas être un conteneur STL.
bool
type de données C ++ avec le BOOL
type Windows qui est typé à long
. Donc sizeof(bool) != sizeof(BOOL)
, ce qui, j'en suis sûr, cause beaucoup de confusion (et probablement pas mal de bugs). En particulier , car il y a aussi boolean
et BOOLEAN
typedefs dans Windows, qui sont des alias pour unsigned char
. Notez également que s'il est courant bool
d'être 1 octet, le standard C ++ a une note qui indique spécifiquement que cela sizeof(bool)
peut être plus grand.