Réponses:
sizeof(bool)
est la mise en œuvre définie, et la norme met l'accent sur ce fait.
§5.3.3 / 1, abrégé:
sizeof(char)
,sizeof(signed char)
etsizeof(unsigned char)
valent 1; le résultat desizeof
appliqué à tout autre type fondamental est défini par l'implémentation. [Remarque: en particulier,sizeof(bool)
etsizeof(wchar_t)
sont définis par l'implémentation. 69) ]
Note de bas de page 69):
sizeof(bool)
n'est pas obligé d'être 1.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
«Dans Visual C ++ 4.2, les fichiers d'en-tête C ++ standard contenaient un typedef qui assimilait bool à int. Dans Visual C ++ 5.0 et versions ultérieures, bool est implémenté en tant que type intégré avec une taille de 1 octet. Cela signifie que pour Visual C ++ 4.2, un appel de sizeof (bool) donne 4, tandis que dans Visual C ++ 5.0 et versions ultérieures, le même appel donne 1. Cela peut provoquer des problèmes de corruption de la mémoire si vous avez défini des membres de structure de type bool dans Visual C ++ 4.2 et que vous mélangez des objets (OBJ) et / ou DLL créés avec les compilateurs 4.2 et 5.0 ou version ultérieure. "
C'est la mise en œuvre définie. Ce sizeof(char)
n'est que 1
par la norme.
CHAR_BIT
, défini dans climits
.
bool
?