Веб-версияОткрыть в Telegram

ПостПочему std::vector<bool> может вести себя странно?

3 сентября 2026
C
C/C++ Ready | Программирование
Фотография
нажмите — покажем
Почему std::vector<bool> может вести себя странно? На первый взгляд vector<bool> выглядит как обычный vector, только для логических значений. Кажется, что каждый элемент там настоящий bool. Но у этого контейнера есть специальная оптимизация. Он может хранить значения битами, поэтому обращение к элементу возвращает не bool&, а proxy-объект. Обычный код выглядит нормально: std::vector<bool> flags = {true, false}; flags[1] = true; Проблемы начинаются, когда хочется взять ссылку на элемент: auto& item = flags[0]; Такой код может не сработать так, как ожидается, потому что flags[0] не является настоящей ссылкой на bool. Даже auto может скрыть нюанс: auto item = flags[0]; item = false; Здесь item часто остаётся proxy-объектом, который связан с контейнером. Код читается как работа с копией, но на деле может менять исходный vector. Если нужен обычный массив флагов без таких сюрпризов, часто проще взять другой тип: std::vector<char> flags; std::vector<uint8_t> mask; А если важна компактная битовая упаковка, лучше явно показать намерение: std::bitset<64> flags; vector<bool> не запрещён, но его лучше не воспринимать как обычный vector<T>. Особенно в шаблонном коде, где ожидаются настоящие ссылки на элементы. 📣 C++ Ready | #совет
14 · 3.2K ·

Рядом в ленте

CC/C++ Ready | ПрограммированиеСобираем scope guard для автоматического отката! Иногда функция успевает изменить состояние, открыть ресурс или создать временный файл, а потом падает на следуюCC/C++ Ready | Программирование7,2 млн рублей призового фонда и реальные задачи космической отрасли 🚀 В сентябре пройдет серия КосмоХакатонов для студентов, молодых ученых и специалистов. Уча
это сообщение
CC/C++ Ready | ПрограммированиеФотографияCC/C++ Ready | ПрограммированиеСильная статья про high performance на C++ для CPU! Автор объясняет, как подходить к ускорению кода. Разбирается CPU, кеши, профилирование, бенчмарки, sanitizer
CC/C++ Ready | ПрограммированиеC/C++ Ready | Программирование@cpp_ready · канал · Технологии
15 602подписчиков2 235средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем