В 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и BOOLEANtypedef, которые являются псевдонимами для unsigned char. Также обратите внимание, что, хотя обычно boolэто 1 байт, в стандарте C ++ есть примечание, в котором конкретно указывается, что он sizeof(bool)может быть больше.