Jak doszło do std :: vector <bool>?

15

Obecnie praktycznie wszyscy programiści C ++ zgadzają się, że std::vector<bool>to pomyłka, ponieważ nie jest to pojemnik, a jego przypadki użycia w dużej mierze pokrywają się z przypadkami tego std::bitset.

Jak zagłosowano na standard? Czy wówczas było to kontrowersyjne? Jakie były główne argumenty potwierdzające?

xcvii
źródło
Nie było std::vectorwcześniej napisane std::bitset?
dan04,
3
Herb Sutter pisze też obszernie o std::vector<bool> tu i tu . Myślę, że jeśli zagłębisz się nieco w jego pisma, znajdziesz wszystkie potrzebne informacje.
Robert Harvey,
1
Zobacz także gotw.ca/publications/mill09.htm
Robert Harvey,

Odpowiedzi:

10

Od Herb Sutter przy użyciu cytowanego odniesienia:

Specjalizacja wektorowa została celowo wprowadzona do standardu, aby dać przykład, jak napisać pojemnik proxy. „Kontener proxy” to kontener, do którego obiektów nie dociera się bezpośrednio; zamiast dawać wskazówki lub odwołania do zawartego obiektu, proxy dostarcza obiekty proxy, których można użyć do pośredniego dostępu do obiektu lub manipulowania nim. Kolekcje proxy mogą być przydatne w przypadkach, gdy do obiektów w kolekcji nie zawsze można bezpośrednio uzyskać niezawodny bezpośredni dostęp, tak jakby znajdowały się one w pamięci, jak na przykład w przypadku kolekcji dyskowej, która automatycznie umieszcza strony w pamięci i poza pamięcią pod okładkami jako potrzebne. Pomysł polegał więc na pokazaniu, jak sprawić, by taki serwer proxy spełniał wymagania „kontenera”

I tak, w tym czasie odbyła się dyskusja.

  1. Aby zobaczyć wszystkie krwawe szczegóły, przejdź do DejaNews i przeprowadź wyszukiwanie mocy dla Subject = "vector and bool" i Forum = " c ++ ". Dyskusje odbyły się w styczniu / lutym 1997 r. Można również znaleźć nowsze dyskusje od osób pytających, jak wyłączyć specjalizację wektorową; moja rada znajduje się na końcu tego artykułu.

Reszta jest historią. I nienawidzę patrzeć na pytanie bez odpowiedzi z tak dobrymi linkami.

david.pfx
źródło