Почему std::vector особенный и какие гарантии он на самом деле предоставляет?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему std::vector особенный и какие гарантии он на самом деле предоставляет?

Сообщение Anonymous »

Код: Выделить всё

std::vector
— единственный стандартный контейнер, имя которого явно предполагает «вектор bool», однако он намеренно не моделирует непрерывный контейнер объектов bool.
Несмотря на нарушение множества предположений, которые справедливы для любого другого std::vector, он остается стандартизированным и неизменным на протяжении десятилетий.
Рассмотрим следующий пример:

Код: Выделить всё

#include 
#include 

int main() {
std::vector v = { true, false, true };
bool* p = &v[0]; // error: not a bool*
}
В отличие от других специализаций std::vector, std::vector:
  • не хранит фактические логические объекты
  • не предоставляет настоящие логические значения*
  • возвращает прокси-объект вместо ссылки от оператора[]
В результате это нарушает такие ожидания, как:
  • взятие адреса элементов
  • API на основе указателей
  • обработка его как обычного непрерывного контейнера
Хотя историческое обоснование оптимизации пространства (Степанов, 1995) хорошо документировано, я ищет конкретное обоснование комитета относительно его статуса в эпоху C++20/23. В частности, почему эта специализация остается неустаревшей, несмотря на то, что она не соответствует современным концепциям, таким как «contigious_range», и рассмотрела ли WG21 официальные затраты на поддержание этого выброса в новой структуре диапазонов?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ly-provide
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»