Como surgiu o std :: vector <bool>?


15

Hoje, praticamente todos os desenvolvedores de C ++ concordam que isso std::vector<bool>foi um erro, já que enganosamente não é um contêiner, e seus casos de uso se sobrepõem amplamente aos de std::bitsetqualquer maneira.

Como foi votado no padrão? Foi controverso na época? Quais foram os principais argumentos de apoio?


Não foi std::vectorescrito antes std::bitset?
precisa saber é


3
Além disso, Herb Sutter escreve extensivamente sobre std::vector<bool> aqui e aqui . Acho que se você pesquisar um pouco mais os escritos dele, encontrará todas as informações necessárias.
Robert Harvey

Respostas:


10

De Herb Sutter usando a referência citada:

A especialização do vetor foi intencionalmente colocada no padrão para fornecer um exemplo de como escrever um contêiner com proxy. Um "contêiner com proxy" é um contêiner cujos objetos você não acessa diretamente; em vez de fornecer ponteiros ou referências a um objeto contido, um contêiner com proxy fornece objetos proxy que podem ser usados ​​para acessar ou manipular indiretamente um objeto contido. Coleções Proxied podem ser úteis nos casos em que os objetos dentro da coleção nem sempre podem ser acessados ​​com confiabilidade diretamente como se estivessem na memória, como por exemplo, com uma coleção baseada em disco que automaticamente pagina partes de si mesma dentro e fora da memória sob as capas, como necessário. Portanto, a ideia era mostrar como fazer com que uma coleção com proxy atendesse aos requisitos de um "contêiner"

E sim, houve discussão na época.

  1. Para todos os detalhes sangrentos, navegue até o DejaNews e faça uma pesquisa avançada por Subject = "vector and bool" e Forum = " c ++ ". As discussões ocorreram em janeiro / fevereiro de 1997. Você também encontrará discussões mais recentes de pessoas perguntando como desativar a especialização de vetores; veja o final deste artigo para meu conselho.

O resto é história. E eu odeio ver uma pergunta sem resposta com links tão bons.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.