Guia e lista definitiva de livros em C ++

4243

Essa pergunta tenta coletar as poucas pérolas entre as dezenas de livros ruins em C ++ publicados todos os anos.

Ao contrário de muitas outras linguagens de programação, que geralmente são encontradas em qualquer lugar nos tutoriais encontrados na Internet, poucos conseguem captar C ++ rapidamente sem estudar um livro C ++ bem escrito. É muito grande e complexo para fazer isso. De fato, é tão grande e complexo que existem muitos livros C ++ muito ruins por aí. E não estamos falando de estilo ruim, mas coisas como exibir erros factuais óbvios e promover estilos de programação péssimos .

Edite a resposta aceita para fornecer livros de qualidade e um nível aproximado de habilidades - de preferência depois de discutir sua adição na sala de bate-papo C ++ . (Os frequentadores podem desfazer o seu trabalho sem piedade, se não concordarem com uma recomendação.) Adicione uma breve descrição / descrição de cada livro que você leu / se beneficiou pessoalmente. Sinta-se à vontade para debater qualidade, títulos, etc. Os livros que atenderem aos critérios serão adicionados à lista. Os livros com resenhas da Associação de Usuários de C e C ++ (ACCU) têm links para a resenha.

* Nota: FAQs e outros recursos podem ser encontrados nas informações da tag C ++ e em.

sbi
fonte

Respostas:

4895

Principiante

Introdutório, sem experiência anterior em programação

  • C ++ Primer * (Stanley Lippman, Josée Lajoie e Barbara E. Moo) ( atualizado para C ++ 11 ) Chegando a 1 milhão de páginas, esta é uma introdução muito completa ao C ++ que cobre quase tudo na linguagem em um formato muito acessível e em grandes detalhes. A quinta edição (lançada em 16 de agosto de 2012) abrange o C ++ 11. [Reveja]

  • Programação: princípios e práticas usando C ++ (Bjarne Stroustrup, 2ª edição - 25 de maio de 2014) ( atualizado para C ++ 11 / C ++ 14 ) Uma introdução à programação usando C ++ pelo criador da linguagem. Uma boa leitura, que não assume nenhuma experiência anterior em programação, mas não é apenas para iniciantes.

* Não confunda com C ++ Primer Plus (Stephen Prata), com uma revisão significativamente menos favorável .

Introdutório, com experiência anterior em programação

  • Um tour pelo C ++ (Bjarne Stroustrup) ( 2ª edição do C ++ 17 ) O "tour" é uma rápida visão geral em tutorial (de cerca de 180 páginas e 14 capítulos) de todo o C ++ padrão (linguagem e biblioteca padrão e usando C ++ 11 ) em um nível moderadamente alto para pessoas que já conhecem C ++ ou pelo menos são programadores experientes. Este livro é uma versão estendida do material que constitui os Capítulos 2-5 da Linguagem de Programação C ++, 4ª edição.

  • C ++ acelerado (Andrew Koenig e Barbara Moo, 1ª edição - 24 de agosto de 2000) Isso basicamente cobre o mesmo terreno que o C ++ Primer , mas em um quarto de seu espaço. Isso ocorre principalmente porque não tenta ser uma introdução à programação , mas uma introdução ao C ++ para pessoas que já haviam programado anteriormente em alguma outra linguagem. Ele tem uma curva de aprendizado mais acentuada, mas, para quem pode lidar com isso, é uma introdução muito compacta ao idioma. (Historicamente, inovou ao ser o primeiro livro para iniciantes a usar uma abordagem moderna para o ensino da língua.) Apesar disso, o C ++ ensinado é puramente C ++ 98. [Reveja]

Melhores Práticas

  • C ++ eficaz (Scott Meyers, 3ª Edição - 22 de maio de 2005) Isso foi escrito com o objetivo de ser o melhor segundo programador que os programadores de C ++ deveriam ler, e conseguiu. As edições anteriores eram destinadas a programadores provenientes de C, a terceira edição muda isso e tem como alvo programadores provenientes de linguagens como Java. Apresenta ~ 50 regras práticas fáceis de lembrar, juntamente com sua lógica em um estilo muito acessível (e agradável). Para C ++ 11 e C ++ 14, os exemplos e alguns problemas estão desatualizados e o C ++ moderno eficaz deve ser preferido. [Reveja]

  • C ++ moderno eficaz (Scott Meyers) Esta é basicamente a nova versão do C ++ eficaz , destinada a programadores de C ++ que fazem a transição de C ++ 03 para C ++ 11 e C ++ 11 e C ++ 14.

  • STL eficaz (Scott Meyers)Tem comoobjetivo fazer o mesmo com a parte da biblioteca padrão proveniente da STL, o que o C ++ eficaz fez com a linguagem como um todo: apresenta regras práticas e sua lógica. [Reveja]

Intermediário

  • C ++ mais eficaz (Scott Meyers) Ainda mais regras práticas que C ++ eficaz . Não é tão importante quanto os do primeiro livro, mas ainda é bom saber.

  • C ++ excepcional (Herb Sutter) Apresentado como um conjunto de quebra-cabeças, este possui uma das melhores e minuciosas discussões sobre o gerenciamento adequado de recursos e a segurança de exceções no C ++ através da aquisição de recursos é inicialização (RAII), além da cobertura detalhada de uma variedade de outros tópicos, incluindo o idioma pimpl, pesquisa de nome, bom design de classe e o modelo de memória C ++. [Reveja]

  • C ++ mais excepcional (Herb Sutter) Abrange tópicos adicionais de segurança de exceção não abordados no C ++ excepcional , além de discussão sobre programação orientada a objetos eficaz em C ++ e uso correto do STL. [Reveja]

  • Estilo excepcional em C ++ (Herb Sutter) Discute programação genérica, otimização e gerenciamento de recursos; este livro também apresenta uma excelente exposição de como escrever código modular em C ++ usando funções que não são membros e o princípio de responsabilidade única. [Reveja]

  • Padrões de codificação C ++ (Herb Sutter e Andrei Alexandrescu) “Padrões de codificação” aqui não significam “quantos espaços devo recuar no meu código?” Este livro contém 101 práticas recomendadas, idiomas e armadilhas comuns que podem ajudá-lo a escrever código C ++ correto, compreensível e eficiente. [Reveja]

  • Modelos C ++: o guia completo (David Vandevoorde e Nicolai M. Josuttis) Este é o livro sobre modelos como eles existiam antes do C ++ 11. Ele cobre tudo, desde o básico até algumas das mais avançadas metaprogramações de modelos e explica todos os detalhes de como os modelos funcionam (conceitualmente e como são implementados) e discute muitas armadilhas comuns. Possui excelentes resumos da regra de definição única (ODR) e resolução de sobrecarga nos apêndices. Uma segunda edição que cobre C ++ 11, C ++ 14 e C ++ 17 já foi publicada. [Reveja]

  • C ++ 17 - O guia completo (Nicolai M. Josuttis) Este livro descreve todos os novos recursos introduzidos no C ++ 17 Standard, cobrindo tudo, desde os mais simples como 'Inline Variables', 'constexpr if' até 'Polymorphic Recursos de memória 'e' Novo e excluir com dados superalinhados '.


Avançado

  • Design moderno em C ++ (Andrei Alexandrescu) Um livro inovador sobre técnicas avançadas de programação genérica. Apresenta design baseado em políticas, listas de tipos e idiomas fundamentais de programação genérica e explica quantos padrões de design úteis (incluindo alocadores de objetos pequenos, functores, fábricas, visitantes e multi-métodos) podem ser implementados de forma eficiente, modular e limpa usando programação genérica . [Reveja]

  • Metaprogramação de modelos C ++ (David Abrahams e Aleksey Gurtovoy)

  • Simultaneidade em C ++ em ação (Anthony Williams) Um livro que aborda o suporte à simultaneidade em C ++ 11, incluindo a biblioteca de threads, a biblioteca atômica, o modelo de memória C ++, bloqueios e mutexes, além de questões de design e depuração de aplicativos multithread. Uma segunda edição que cobre C ++ 14 e C ++ 17 já foi publicada.

  • Metaprogramação C ++ avançada (Davide Di Gennaro) Um manual pré-C ++ 11 de técnicas de TMP, focado mais na prática do que na teoria. Existem vários trechos neste livro, alguns dos quais são obsoletos por traços de tipo, mas as técnicas são úteis no entanto. Se você consegue suportar a formatação / edição peculiar, é mais fácil ler do que o Alexandrescu e, sem dúvida, mais gratificante. Para desenvolvedores mais experientes, há uma boa chance de você descobrir algo sobre um canto escuro do C ++ (uma peculiaridade) que geralmente só ocorre através de uma vasta experiência.

  • Programação funcional em C ++ (Ivan Čukić) O livro apresenta ao leitor o paradigma funcional em C ++ moderno. Abrange os aspectos teóricos e de código com uma variedade de exemplos e diagramas. O autor tem experiência no ensino e o utiliza para orientar suavemente o leitor através de diferentes aspectos da programação funcional.


Estilo de referência - todos os níveis

  • A linguagem de programação C ++ (Bjarne Stroustrup) ( atualizada para C ++ 11 ) A introdução clássica ao C ++ por seu criador. Escrito para acompanhar o clássico K&R, ele realmente se parece muito com ele e abrange quase tudo, desde a linguagem principal até a biblioteca padrão, os paradigmas de programação e a filosofia da linguagem. [Revisão] Nota: Todas as versões do padrão C ++ são rastreadas nesta pergunta: Onde encontro o padrão C ++ atual .

  • Tutorial e referência da biblioteca padrão C ++ (Nicolai Josuttis) ( atualizado para C ++ 11 ) A introdução e referência para a biblioteca padrão C ++. A segunda edição (lançada em 9 de abril de 2012) abrange o C ++ 11. [Reveja]

  • Os fluxos e localizações de C ++ IO (Angelika Langer e Klaus Kreft) Há muito pouco a dizer sobre este livro, exceto que, se você quiser saber algo sobre fluxos e localidades, esse é o único local para encontrar respostas definitivas. [Reveja]

C ++ 11/14/17 /… Referências:

  • Os C ++ 11 / 14 / 17 normais (INCITS / ISO / IEC 14882: 2011/2014/2017) Isto, naturalmente, é o árbitro final de tudo o que é ou não é C ++. Esteja ciente, no entanto, de que ele se destina apenas como uma referência para usuários experientes que desejam dedicar tempo e esforço consideráveis ​​ao seu entendimento. O padrão C ++ 17 é lançado em formato eletrônico para 198 francos suíços.

  • O padrão C ++ 17 está disponível, mas aparentemente não de forma econômica - diretamente do ISO custa 198 francos suíços (cerca de US $ 200). Para a maioria das pessoas, o rascunho final antes da padronização é mais do que adequado (e gratuito). Muitos preferem um rascunho ainda mais recente , documentando novos recursos que provavelmente serão incluídos no C ++ 20.

  • Visão geral do novo C ++ (C ++ 11/14) (apenas PDF) (Scott Meyers) ( atualizado para o C ++ 14 ) Estes são os materiais de apresentação (slides e algumas notas de aula) de um curso de treinamento de três dias oferecido por Scott Meyers, um autor altamente respeitado em C ++. Embora a lista de itens seja curta, a qualidade é alta.

  • As Diretrizes Principais do C ++ (C ++ 11/14/17 /…) (editadas por Bjarne Stroustrup e Herb Sutter) são um documento on-line em evolução que consiste em um conjunto de diretrizes para o uso moderno de C ++. As diretrizes estão focadas em questões de nível relativamente mais alto, como interfaces, gerenciamento de recursos, gerenciamento de memória e concorrência que afetam a arquitetura do aplicativo e o design da biblioteca. O projeto foi anunciado no CppCon'15 por Bjarne Stroustrup e outros e agradece as contribuições da comunidade. A maioria das diretrizes é complementada com uma justificativa e exemplos, além de discussões sobre o possível suporte a ferramentas. Muitas regras são projetadas especificamente para serem verificáveis ​​automaticamente por ferramentas de análise estática.

  • O Super ++ FAQ do C ++ (Marshall Cline, Bjarne Stroustrup e outros) é um esforço da Standard C ++ Foundation para unificar as FAQs do C ++ anteriormente mantidas individualmente pelo Marshall Cline e Bjarne Stroustrup e também incorporando novas contribuições. Os itens tratam principalmente de questões de nível intermediário e geralmente são escritos com um tom de humor. Nem todos os itens podem estar totalmente atualizados com a edição mais recente do padrão C ++ ainda.

  • O cppreference.com (C ++ 03/11/14/17 /…) (iniciado por Nate Kohl) é um wiki que resume os recursos básicos da linguagem principal e possui extensa documentação da biblioteca padrão do C ++. A documentação é muito precisa, mas é mais fácil de ler do que o documento padrão oficial e fornece melhor navegação devido à sua natureza wiki. O projeto documenta todas as versões do padrão C ++ e o site permite filtrar a exibição para uma versão específica. O projeto foi apresentado por Nate Kohl no CppCon'14 .


Clássicos / Mais antigos

Nota: Algumas informações contidas nesses livros podem não estar atualizadas ou não serem mais consideradas práticas recomendadas.

  • O design e a evolução do C ++ (Bjarne Stroustrup) Se você deseja saber por que a linguagem é a que é, este livro é onde você encontra respostas. Isso abrange tudo antes da padronização do C ++.

  • Ruminações em C ++ - (Andrew Koenig e Barbara Moo) [Revisão]

  • Estilos e expressões avançadas de programação em C ++ (James Coplien) Antecessor do movimento de padrões, descreve muitas "expressões idiomáticas" específicas para C ++. Certamente é um livro muito bom e pode ainda valer a pena ser lido, se você puder poupar tempo, mas bastante antigo e não atualizado com o C ++ atual.

  • Design de software C ++ em larga escala (John Lakos) Lakos explica técnicas para gerenciar projetos de software C ++ muito grandes. Certamente, uma boa leitura, se estiver atualizada. Foi escrito muito antes do C ++ 98 e perde muitos recursos (por exemplo, namespaces) importantes para projetos de grande escala. Se você precisar trabalhar em um grande projeto de software em C ++, poderá lê-lo, embora precise levar mais do que um grão de sal com ele. O primeiro volume de uma nova edição é lançado em 2019 .

  • Por dentro do modelo de objeto C ++ (Stanley Lippman) Se você deseja saber como as funções de membro virtual são comumente implementadas e como os objetos base são geralmente dispostos na memória em um cenário de várias heranças, e como tudo isso afeta o desempenho, é aqui que você encontre discussões aprofundadas sobre esses tópicos.

  • O manual de referência do C ++ anotado (Bjarne Stroustrup, Margaret A. Ellis) Este livro está bastante desatualizado pelo fato de explorar a versão 1989 do C ++ 2.0 - modelos, exceções, espaços para nome e novos lançamentos ainda não foram introduzidos. Afirmando que, no entanto, este livro percorre todo o padrão C ++ da época, explicando a lógica, as possíveis implementações e os recursos da linguagem. Este não é um livro para aprender os princípios e padrões de programação em C ++, mas para entender todos os aspectos da linguagem C ++.

  • Pensando em C ++ (Bruce Eckel, 2ª Edição, 2000). Dois volumes; é umconjunto gratuito de livros de introdução aoestilo tutorial. Downloads: vol 1 , vol 2 . Infelizmente, eles são prejudicados por vários erros triviais (por exemplo, mantendo que os temporários são automaticamenteconst), sem lista oficial de erratas. A 3 parcial rd lista do partido errata está disponível em ( http://www.computersciencelab.com/Eckel.htm ), mas, aparentemente, não está mantido.

  • C ++ científico e de engenharia: uma introdução a técnicas e exemplos avançados (John Barton e Lee Nackman) É um livro abrangente e muito detalhado que tentou explicar e fazer uso de todos os recursos disponíveis em C ++, no contexto de métodos numéricos. Ele introduziu na época várias novas técnicas, como o Padrão de Modelo Curiosamente Recorrente (CRTP, também chamado truque de Barton-Nackman). Foi pioneira em várias técnicas, como análise dimensional e diferenciação automática. Ele veio com muito código compilável e útil, variando de um analisador de expressão a um wrapper Lapack. O código ainda está disponível aqui: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Infelizmente, os livros se tornaram um pouco desatualizados no estilo e nos recursos do C ++, no entanto, foi uma incrível tour-de-force na época (1994, pré-STL). Os capítulos sobre herança dinâmica são um pouco complicados de entender e não são muito úteis. Uma versão atualizada deste livro clássico que inclui a semântica de movimentação e as lições aprendidas com o STL seria muito agradável.

George Stocker
fonte
402
GG Rassovsky: Todos os livros que prometem ensinar X em Y horas. Por exemplo, Aprenda C ++ em 24 horas. Eu acredito que todos esses livros são melhor evitados.
akhil_mittal
115
Detesto pisar no lugar de qualquer pessoa, mas não recomendo "Thinking in C ++", de Bruce Eckel, apesar de respeitar o autor por publicar seus materiais on-line gratuitamente. A perspectiva do livro sugere o uso relativamente pobre ou ineficaz de C ++ e programação "orientada a objetos", semelhante à má aplicação dos padrões de design do GoF. Achei um livro introdutório interessante para programação em geral, mas como alguém se familiariza mais com programação e (especialmente) ciência da computação como um todo, encontro livros que pensam puramente em termos de POO "clássicos" prejudiciais à educação.
30
@ G.Rassovsky no site accu.org, há uma seção de resenhas de livros com classificações. Você pode procurar os C ++. Muitos deles são classificados como "não recomendados".
Zaphod Beeblebrox
83
O C ++ acelerado é de 2000. Devo me preocupar que esteja desatualizado?
AutonomousApps
60
Eu acho que seria bom colocar as datas publicadas para a edição (com o número da edição, quando aplicável).
Aaron Hall