Come è nato std :: vector <bool>?


15

Oggi, praticamente tutti gli sviluppatori C ++ concordano sul fatto che è std::vector<bool>stato un errore poiché non è ingannevolmente un contenitore e i suoi casi d'uso si sovrappongono in gran parte a quelli di std::bitsetcomunque.

Come è stato votato nello standard? All'epoca era controverso? Quali sono stati i principali argomenti a sostegno?


Non è stato std::vectorscritto prima std::bitset?
dan04


3
Inoltre, Herb Sutter scrive ampiamente std::vector<bool> qui e qui . Penso che se approfondisci un po 'i suoi scritti, troverai tutte le informazioni di cui hai bisogno.
Robert Harvey,

Risposte:


10

Da Herb Sutter usando il riferimento citato:

La specializzazione vettoriale è stata intenzionalmente inserita nello standard per fornire un esempio di come scrivere un contenitore proxy. Un "contenitore proxy" è un contenitore i cui oggetti non si ottengono direttamente; invece di darti puntatori o riferimenti a un oggetto contenuto, un contenitore proxy fornisce oggetti proxy che possono essere utilizzati per accedere o manipolare indirettamente un oggetto contenuto. Le raccolte con proxy possono essere utili nei casi in cui gli oggetti all'interno della raccolta non sono sempre accessibili in modo affidabile direttamente come se fossero in memoria, come ad esempio con una raccolta basata su disco che inserisce e rimuove automaticamente i pezzi di se stessa dalla memoria sotto le copertine come necessario. Quindi l'idea era quella di mostrare come far sì che una raccolta così delegata rispondesse ai requisiti di un "contenitore"

E sì, c'erano discussioni in quel momento.

  1. Per tutti i dettagli cruenti, naviga su DejaNews e fai una ricerca di potere su Subject = "vector and bool" e Forum = " c ++ ". Le discussioni si sono svolte nel gennaio / febbraio 1997. Troverai anche discussioni più recenti di persone che chiedono come disattivare la specializzazione vettoriale; vedere la fine di questo articolo per i miei consigli.

Il resto è storia. E odio vedere una domanda senza risposta con buoni collegamenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.