135 votes

Est-ce que sizeof(bool) est défini ?

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 ?

193voto

GManNickG Points 155079

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) et sizeof(unsigned char) sont 1 ; le résultat de sizeof appliquée à tout autre type fondamental est définie par l'implémentation. Note : 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 tenu d'être égal à 1.

21voto

Yi Ling Points 53

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

12voto

peoro Points 12875

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

3voto

BЈовић Points 28674

Voir 5.3.3 paragraphe 1 :

Note : en particulier, sizeof(bool) et sizeof(wchar_t) sont définis par l'implémentation.69) ]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X