Je ne trouve pas de réponse dans la documentation standard. Est-ce que sizeof(bool)
est toujours de 1 octet, ou est-elle définie par la mise en œuvre ?
Réponses
Trop de publicités?Oui, il s'agit d'une mise en œuvre définie, et la norme insiste beaucoup pour que cela soit clair.
§5.3.3/1, abrégé :
sizeof(char)
,sizeof(signed char)
etsizeof(unsigned char)
sont 1 ; le résultat desizeof
appliquée à tout autre type fondamental est définie par l'implémentation. Note : 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 tenu d'être égal à 1.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"Dans Visual C++4.2, les fichiers d'en-tête de Standard C++ contenaient un typage qui assimilait bool à int. Dans Visual C++ 5.0 et les versions ultérieures, bool est implémenté comme un 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 plus, le même appel donne 1. Cela peut causer des problèmes de corruption de 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 fichiers objets (OBJ) et/ou des DLL construits avec les compilateurs 4.2 et 5.0 ou plus."