Як виник std :: vector <bool>?


15

Сьогодні практично всі розробники C ++ сходяться на думці, що це std::vector<bool>була помилка, оскільки вона обманливо не є контейнером, а випадки його використання значною мірою перегукуються з std::bitsetбудь-якими.

Як це було проголосовано за стандарт? Це було спірним у той час? Які основні аргументи підтверджували?


Не std::vectorписали раніше std::bitset?
dan04


3
Також Герб Саттер багато пише про std::vector<bool> тут і тут . Я думаю, що якщо ви трохи більше зануритесь у його твори, ви знайдете всю необхідну інформацію.
Роберт Харві

Відповіді:


10

Від Herb Sutter, використовуючи посилання:

Векторна спеціалізація була навмисно введена у стандарт, щоб навести приклад того, як написати проксі-контейнер. "Проксі-контейнер" - це контейнер, до об'єктів якого ви не потрапляєте безпосередньо; замість того, щоб давати вам покажчики чи посилання на вміст, що міститься, проксі-контейнер надає вам проксі-об'єкти, які можна використовувати для опосередкованого доступу або маніпулювання об'єктом, що міститься. Проксі-колекції можуть бути корисні в тих випадках, коли до об'єктів у колекції не завжди можна надійно отримати доступ безпосередньо до пам'яті, як, наприклад, колекція на основі диска, яка автоматично розміщує фрагменти себе в і з пам'яті під обкладинками, як потрібні. Отже, ідея полягала в тому, щоб показати, як зробити так, щоб колекція proxied відповідала вимогам "контейнера"

І так, в той час була дискусія.

  1. Щоб дізнатись усі деталі, перегляньте DejaNews та зробіть пошук потужності для Subject = "vector and bool" та Forum = " c ++ ". Обговорення відбувалися в січні / лютому 1997 р. Ви також знайдете новітні дискусії від людей, які запитують, як відключити векторну спеціалізацію; дивіться кінець цієї статті для моєї поради.

Решта - це історія. І я ненавиджу бачити без відповіді питання з такими хорошими посиланнями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.