CPP_GEEK Telegram 330
Тема: Почему std::vector<bool> - не совсем std::vector

На первый взгляд std::vector<bool> — обычный вектор, только из булевых значений. Но это особенный шаблон. Вместо хранения bool как полноценного байта, он упаковывает их в биты. Экономит память? Да. Но есть нюансы.

Пример:


std::vector<bool> flags = {true, false, true};
auto x = flags[0]; // Не bool, а прокси-объект!
bool y = flags[0]; // OK — копия значения
bool& z = flags[0]; // Ошибка компиляции


flags[0] возвращает proxy-объект, а не bool&, потому что нельзя вернуть ссылку на бит. Из-за этого:

* Нельзя взять адрес элемента
* Нельзя использовать std::vector<bool> с API, ожидающим bool* или bool&
* Некоторые шаблоны не работают (особенно в generic-коде)

Хочешь экономии — будь готов к сюрпризам. Хочешь предсказуемости — используй std::deque<bool> или std::vector<char>.

⚠️ Кстати, std::vector<bool>единственная специализация STL-контейнера в стандартной библиотеке.

➡️ @cpp_geek
👍9🔥21



tgoop.com/cpp_geek/330
Create:
Last Update:

Тема: Почему std::vector<bool> - не совсем std::vector

На первый взгляд std::vector<bool> — обычный вектор, только из булевых значений. Но это особенный шаблон. Вместо хранения bool как полноценного байта, он упаковывает их в биты. Экономит память? Да. Но есть нюансы.

Пример:


std::vector<bool> flags = {true, false, true};
auto x = flags[0]; // Не bool, а прокси-объект!
bool y = flags[0]; // OK — копия значения
bool& z = flags[0]; // Ошибка компиляции


flags[0] возвращает proxy-объект, а не bool&, потому что нельзя вернуть ссылку на бит. Из-за этого:

* Нельзя взять адрес элемента
* Нельзя использовать std::vector<bool> с API, ожидающим bool* или bool&
* Некоторые шаблоны не работают (особенно в generic-коде)

Хочешь экономии — будь готов к сюрпризам. Хочешь предсказуемости — используй std::deque<bool> или std::vector<char>.

⚠️ Кстати, std::vector<bool>единственная специализация STL-контейнера в стандартной библиотеке.

➡️ @cpp_geek

BY C++ geek


Share with your friend now:
tgoop.com/cpp_geek/330

View MORE
Open in Telegram


Telegram News

Date: |

The optimal dimension of the avatar on Telegram is 512px by 512px, and it’s recommended to use PNG format to deliver an unpixelated avatar. Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you: Telegram offers a powerful toolset that allows businesses to create and manage channels, groups, and bots to broadcast messages, engage in conversations, and offer reliable customer support via bots. For crypto enthusiasts, there was the “gm” app, a self-described “meme app” which only allowed users to greet each other with “gm,” or “good morning,” a common acronym thrown around on Crypto Twitter and Discord. But the gm app was shut down back in September after a hacker reportedly gained access to user data. How to Create a Private or Public Channel on Telegram?
from us


Telegram C++ geek
FROM American