web-dev-qa-db-fra.com

Est-ce que sizeof (bool) est défini dans le standard de langage C ++?

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?

103
0xbadf00d

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) et sizeof(unsigned char) valent 1; le résultat de sizeof appliqué à tout autre type fondamental est défini par l'implémentation. [Remarque: en particulier, sizeof(bool) et sizeof(wchar_t) sont définis par l'implémentation.69)]

Note de bas de page 69):

sizeof(bool) n'est pas obligatoirement égal à 1.

151
GManNickG

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. "

13
Yi Ling

C'est la mise en œuvre définie. Seul sizeof(char) est 1 par la norme.

10
peoro

Voir 5.3.3, paragraphe 1:

[Remarque: en particulier, sizeof (bool) et sizeof (wchar_t) sont définis par la mise en œuvre.69)]

3
BЈовић