Определяется ли sizeof (bool) в стандарте языка C ++? - PullRequest
100 голосов
/ 04 февраля 2011

Я не могу найти ответ в стандартной документации. Требует ли стандарт языка C ++ sizeof(bool), чтобы всегда было 1 (для 1 байта), или этот размер определяется реализацией?

Ответы [ 4 ]

148 голосов
/ 04 февраля 2011

sizeof(bool) определяется реализацией, и стандарт придает этому факту заметный акцент.

§5.3.3 / 1, сокращенно:

sizeof(char), sizeof(signed char) и sizeof(unsigned char) равны 1; результат sizeof, примененный к любому другому фундаментальному типу, определяется реализацией. [Примечание: в частности, sizeof(bool) и sizeof(wchar_t) определяются реализацией. 69) ]

Сноска 69):

sizeof(bool) не обязательно должно быть 1.

13 голосов
/ 04 августа 2011

http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

"В Visual C ++ 4.2 стандартные заголовочные файлы C ++ содержали typedef, который приравнивал bool к int. В Visual C ++ 5.0 и более поздних версиях bool реализован как встроенный тип с размером 1 байт. Это означает, что что для Visual C ++ 4.2 вызов sizeof (bool) возвращает 4, в то время как в Visual C ++ 5.0 и более поздних тот же вызов приводит к 1. Это может вызвать проблемы с повреждением памяти, если вы определили элементы структуры типа bool в Visual C ++ 4.2 и смешивает объектные файлы (OBJ) и / или DLL, созданные с помощью компиляторов 4.2 и 5.0 или более поздних версий. "

10 голосов
/ 04 февраля 2011

Это реализация определена. Только sizeof(char) по стандарту 1.

3 голосов
/ 04 февраля 2011

См. Пункт 5.3.3 пункта 1:

[Примечание: в частности, sizeof (bool) и sizeof (wchar_t) определяется реализацией.69)]

...