Ответы:
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.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
«В Visual C ++ 4.2 заголовочные файлы Standard 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 или более поздних версий ".
Его реализация определена. Только sizeof(char)
это 1
стандарт.
CHAR_BIT
, определено в climits
.
bool
?