Хороший выбор зависит от того, как вы собираетесь использовать биты.
std::bitset<N>
имеет фиксированный размер. Visual C ++ 10.0 не соответствует требованиям. конструкторам; в общем, вы должны предоставить обходной путь. По иронии судьбы, это произошло из-за того, что Microsoft считала исправлением ошибки - они представили конструктор, принимающий аргумент int
, насколько я помню.
std::vector<bool>
оптимизируется так же, как и std::bitset
. Стоимость: индексирование напрямую не предоставляет ссылку (в C ++ нет ссылок на отдельные биты), но вместо этого возвращает прокси-объект, который вы не заметите, пока не попробуете использовать его в качестве ссылки. Преимущество: минимальное хранилище, а вектор может быть изменен по мере необходимости.
Просто используя, например, unsigned
также вариант, если вы собираетесь работать с небольшим количеством битов (на практике 32 или меньше, хотя формальная гарантия составляет всего 16 бит).
Наконец, все идентификаторы UPPERCASE по соглашению (кроме Microsoft) зарезервированы для макросов, чтобы уменьшить вероятность конфликтов имен. Поэтому не рекомендуется использовать ВСЕ идентификаторы UPPERCASE ни для чего, кроме макросов. И всегда использовать ВСЕ UPPERCASE идентификаторы для макросов (это также облегчает их распознавание).
Приветствия & hth.,