У мові 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і BOOLEANtypedefs, які є псевдонімами для unsigned char. Також зауважте, що хоча це звичайно bool1 байт, стандарт C ++ має примітку, яка конкретно вказує, що sizeof(bool)може бути більшим.