Comment std :: vector <bool> est-il né?

15

Aujourd'hui, pratiquement tous les développeurs C ++ conviennent que std::vector<bool>c'était une erreur car ce n'est trompeusement pas un conteneur, et ses cas d'utilisation se chevauchent largement avec ceux de std::bitsettoute façon.

Comment a-t-il été voté dans la norme? Était-ce controversé à l'époque? Quels ont été les principaux arguments à l'appui?

xcvii
la source
N'a pas été std::vectorécrit avant std::bitset?
dan04
3
En outre, Herb Sutter écrit abondamment sur std::vector<bool> ici et ici . Je pense que si vous fouillez un peu plus dans ses écrits, vous trouverez toutes les informations dont vous avez besoin.
Robert Harvey
1
Voir aussi gotw.ca/publications/mill09.htm
Robert Harvey

Réponses:

10

De Herb Sutter en utilisant la référence citée:

La spécialisation vectorielle a été intentionnellement ajoutée à la norme pour fournir un exemple de la façon d'écrire un conteneur mandaté. Un "conteneur mandaté" est un conteneur dont vous n'atteignez pas directement les objets; au lieu de vous donner des pointeurs ou des références à un objet contenu, un conteneur mandaté vous donne des objets proxy qui peuvent être utilisés pour accéder ou manipuler indirectement un objet contenu. Les collections par proxy peuvent être utiles dans les cas où les objets de la collection ne peuvent pas toujours être accessibles de manière fiable directement comme s'ils étaient en mémoire, comme par exemple avec une collection sur disque qui page automatiquement des morceaux d'elle-même dans et hors de la mémoire sous les couvertures comme nécessaire. L'idée était donc de montrer comment faire pour qu'une telle collection mandataire réponde aux exigences d'un «conteneur»

Et oui, il y avait une discussion à l'époque.

  1. Pour tous les détails sanglants, surfez sur DejaNews et effectuez une recherche de puissance pour Subject = "vector and bool" et Forum = " c ++ ". Les discussions ont eu lieu en janvier / février 1997. Vous trouverez également des discussions plus récentes de personnes demandant comment désactiver la spécialisation vectorielle; voir la fin de cet article pour mes conseils.

Le reste appartient à l'histoire. Et je déteste voir une question sans réponse avec de si bons liens.

david.pfx
la source