Відповіді:
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 стандартні файли заголовків 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
?