Wie ist std :: vector <bool> entstanden?

15

Heutzutage sind sich praktisch alle C ++ - Entwickler einig, dass dies std::vector<bool>ein Fehler war, da es sich fälschlicherweise nicht um einen Container handelt und sich seine Anwendungsfälle weitgehend mit denen von std::bitsetsowieso überschneiden .

Wie wurde es in den Standard aufgenommen? War es damals umstritten? Was waren die wichtigsten Argumente?

xcvii
quelle
Wurde noch nie std::vectorgeschrieben std::bitset?
Dan04
3
Auch Herb Sutter schreibt ausführlich über std::vector<bool> hier und hier . Ich denke, wenn Sie sich ein bisschen mehr mit seinen Schriften beschäftigen, werden Sie alle Informationen finden, die Sie brauchen.
Robert Harvey
1
Siehe auch gotw.ca/publications/mill09.htm
Robert Harvey

Antworten:

10

Von Herb Sutter unter Verwendung der zitierten Referenz:

Die Vektorspezialisierung wurde absichtlich in den Standard aufgenommen, um ein Beispiel für das Schreiben eines Proxy-Containers zu geben. Ein "Proxy-Container" ist ein Container, auf dessen Objekte Sie nicht direkt zugreifen können. Anstatt Ihnen Zeiger oder Verweise auf ein enthaltenes Objekt zu geben, gibt Ihnen ein Proxy-Container Proxy-Objekte, mit denen Sie indirekt auf ein enthaltenes Objekt zugreifen oder es bearbeiten können. Proxysammlungen können hilfreich sein, wenn auf die Objekte in der Sammlung nicht immer zuverlässig direkt zugegriffen werden kann, als befänden sie sich im Speicher, beispielsweise bei einer festplattenbasierten Sammlung, die automatisch Teile von sich selbst in den und außerhalb des Speichers blättert erforderlich. Die Idee war es also zu zeigen, wie eine solche Proxy-Sammlung die Anforderungen eines "Containers" erfüllen kann.

Und ja, es gab damals Diskussionen.

  1. Surfen Sie für alle wichtigen Details zu DejaNews und führen Sie eine Powersuche nach Subject = "vector and bool" und Forum = " c ++ " durch. Die Diskussionen fanden im Januar / Februar 1997 statt. Sie finden auch neuere Diskussionen von Leuten, die gefragt haben, wie die Vektorspezialisierung deaktiviert werden soll. siehe das Ende dieses Artikels für meinen Rat.

Der Rest ist Geschichte. Und ich hasse es, eine unbeantwortete Frage mit so guten Links zu sehen.

david.pfx
quelle