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