Je ne trouve pas de réponse dans la documentation standard. Est-ce que la norme de langage C++ exige que sizeof(bool)
soit toujours égal à 1 (pour 1 octet), ou cette taille est-elle définie par la mise en œuvre?
sizeof(bool)
est défini par l'implémentation, 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 obligatoirement égal à 1.
http://msdn.Microsoft.com/en-us/library/tf4dy80a.aspx
"Dans Visual C++ 4.2, les fichiers d'en-tête Standard C++ 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, alors que dans Visual C++ 5.0 et version ultérieure, le même appel donne 1. Cela peut entraîner 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 mélangez des objets fichiers (OBJ) et/ou DLL créés avec les compilateurs 4.2 et 5.0 ou ultérieurs. "
C'est la mise en œuvre définie. Seul sizeof(char)
est 1
par la norme.
Voir 5.3.3, paragraphe 1:
[Remarque: en particulier, sizeof (bool) et sizeof (wchar_t) sont définis par la mise en œuvre.69)]