У мові C ++ мені цікаво, чому тип bool дорівнює 8 біт (у моїй системі), де достатньо лише одного біта для утримання булевого значення?
Раніше я вважав, що це з міркувань продуктивності, але тоді на 32-бітній або 64-бітовій машині, де регістри шириною 32 або 64 біти, яка перевага від продуктивності?
Або це лише одна з цих «історичних» причин?
sizeof(bool)
було б 4. Я міг би посягнути, що у msvc було 32-бітових булів, але я просто спробував, і це не так.
vector<bool>
полягає не в тому, що він намагається бути розумним і упакувати булі в біти, а в тому, що він намагається це зробити і маскуватися під контейнер STL . Звичайний біт був би добре, доки він також не видаватиметься контейнером STL.
bool
тип даних C ++ з типом Windows, для BOOL
якого встановлено тип long
. Отже sizeof(bool) != sizeof(BOOL)
, що я впевнений, викликає багато плутанини (і, мабуть, неабияку кількість помилок). Тим більше, що в Windows також є boolean
і BOOLEAN
typedefs, які є псевдонімами для unsigned char
. Також зауважте, що хоча це звичайно bool
1 байт, стандарт C ++ має примітку, яка конкретно вказує, що sizeof(bool)
може бути більшим.