the - O guia e a lista do livro definitivo de C++



the c++ programming language (1)

Esta questão tenta coletar as poucas pérolas entre as dezenas de livros ruins de C ++ publicados todos os anos.

Ao contrário de muitas outras linguagens de programação, que muitas vezes são obtidas em tutoriais encontrados na Internet, poucas são capazes de pegar rapidamente o C ++ sem estudar um livro de C ++ bem escrito. É muito grande e complexo para fazer isso. Na verdade, é tão grande e complexo que há muitos livros muito ruins de C ++ por aí. E não estamos falando de estilo ruim, mas coisas como ostentar erros factuais óbvios e promover estilos de programação péssimos .

Por favor, edite a resposta aceita para fornecer livros de qualidade e um nível de habilidade aproximado - de preferência depois de discutir sua adição na sala de bate-papo C ++ . (Os frequentadores podem desfazer seu trabalho sem misericórdia se eles não concordarem com uma recomendação.) Adicione uma breve sinopse / descrição sobre cada livro que você pessoalmente leu / se beneficiou. Sinta-se à vontade para debater qualidade, cabeçalhos, etc. Os livros que atenderem aos critérios serão adicionados à lista. Livros que tenham revisões da Associação de Usuários C e C ++ (ACCU) possuem links para a revisão.

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


Principiante

Introdutório, sem experiência prévia em programação

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

  • 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 pressupõe experiência prévia em programação, mas não é apenas para iniciantes.

* Não deve ser confundido com o C ++ Primer Plus (Stephen Prata), com uma review significativamente menos favorável.

Introdutório, com experiência prévia em programação

  • Um Tour de C ++ (Bjarne Stroustrup) ( 2ª edição para C ++ 17 ) O “tour” é um tutorial rápido (cerca de 180 páginas e 14 capítulos) de todos os 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 The C ++ Programming Language, 4ª edição.

  • Acelerado C ++ (Andrew Koenig e Barbara Moo, 1a Edição - 24 de agosto de 2000) Basicamente, ele cobre o mesmo terreno que o C ++ Primer , mas o faz em um quarto de seu espaço. Isso ocorre principalmente porque ele não tenta ser uma introdução à programação , mas uma introdução ao C ++ para pessoas que já foram programadas em algum outro idioma. Ele tem uma curva de aprendizado mais acentuada, mas, para aqueles que conseguem lidar com isso, é uma introdução muito compacta à linguagem. (Historicamente, ele inovou ao ser o primeiro livro de iniciantes a usar uma abordagem moderna para ensinar a linguagem.) Apesar disso, o C ++ que ele ensina é puramente C ++ 98. [Review]

Melhores práticas

  • C ++ efetivo (Scott Meyers, 3rd Edition - 22 de maio de 2005) Este foi escrito com o objetivo de ser o melhor segundo programador que os programadores C ++ deveriam ler, e foi bem-sucedido. Edições anteriores foram destinadas a programadores vindos de C, a terceira edição muda isso e tem como alvo programadores vindos de linguagens como Java. Ele apresenta ~ 50 regras fáceis de lembrar, juntamente com a sua lógica de um estilo muito acessível (e agradável). Para C ++ 11 e C ++ 14, os exemplos e alguns problemas estão desatualizados e o Effective Modern C ++ deve ser preferido. [Review]

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

  • STL Efetivo (Scott Meyers) Isto visa fazer o mesmo com a parte da biblioteca padrão proveniente do STL que o C ++ Efetivo fez para a linguagem como um todo: ele apresenta regras práticas juntamente com sua lógica. [Review]

Intermediário

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

  • Excepcional C ++ (Herb Sutter) Apresentado como um conjunto de quebra-cabeças, este tem uma das melhores e mais completas discussões sobre o gerenciamento adequado de recursos e segurança de exceções em C ++ por meio da aquisição de recursos (RAII) além da cobertura detalhada de uma variedade de outros tópicos, incluindo o idioma pimpl, pesquisa de nome, design de boa classe e o modelo de memória C ++. [Review]

  • Mais C ++ Excepcional (Herb Sutter) Aborda tópicos adicionais de segurança de exceção não abordados em C ++ Excepcional , além da discussão de programação orientada a objetos eficaz em C ++ e uso correto do STL. [Review]

  • Excepcional C ++ Style (Herb Sutter) Discute programação genérica, otimização e gerenciamento de recursos; Este livro também tem uma excelente exposição de como escrever código modular em C ++ usando funções não-membro e o princípio de responsabilidade única. [Review]

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

  • Modelos C ++: O Guia Completo (David Vandevoorde e Nicolai M. Josuttis) Este é o livro sobre modelos como eles existiam antes do C ++ 11. Abrange desde os conceitos básicos até algumas das metaprogramações de modelos mais avançadas e explica todos os detalhes de como os modelos funcionam (tanto conceitualmente quanto como eles são implementados) e discute muitas armadilhas comuns. Tem excelentes resumos da Regra de Definição Única (ODR) e resolução de sobrecarga nos apêndices. Uma segunda edição cobrindo C ++ 11, C ++ 14 e C ++ 17 já foi publicada. [Review]

Avançado

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

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

  • Concorrência em Ação em C ++ (Anthony Williams) Um livro cobrindo o suporte à simultaneidade do C ++ 11 incluindo a biblioteca de threads, a biblioteca atômica, o modelo de memória C ++, bloqueios e mutexes, bem como problemas de criação e depuração de aplicativos multithread.

  • Metaprogramação Avançada em C ++ (Davide Di Gennaro) Um manual de técnicas de TMP pré-C ++ 11, focado mais na prática do que na teoria. Há uma tonelada de trechos neste livro, alguns dos quais são tornados obsoletos por tipos de traços, mas as técnicas, no entanto, são úteis para se conhecer. Se você conseguir aguentar a formatação / edição peculiar, é mais fácil ler do que Alexandrescu e, provavelmente, mais recompensador. Para desenvolvedores mais experientes, há uma boa chance de que você possa captar algo sobre um canto obscuro do C ++ (um capricho) que geralmente só acontece por meio de uma vasta experiência.

Estilo de Referência - Todos os Níveis

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

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

  • O C ++ IO Streams e Locales (Angelika Langer e Klaus Kreft) Há muito pouco a dizer sobre este livro, exceto que, se você quiser saber alguma coisa sobre fluxos e locais, então este é o único lugar para encontrar respostas definitivas. [Review]

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

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

  • O padrão C ++ 17 está disponível, mas aparentemente não de forma econômica - 17 custa 198 francos suíços (cerca de US $ 200). Para a maioria das pessoas, o esboço final antes da padronização é mais do que adequado (e gratuito). Muitos preferirão 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) (somente em PDF) (Scott Meyers) ( atualizado para C ++ 1y / C ++ 14 ) Estes são os materiais de apresentação (slides e algumas anotações) de um dia de treinamento oferecido por Scott Meyers, que é um autor altamente respeitado em C ++. Embora a lista de itens seja curta, a qualidade é alta.

  • O C ++ Core Guidelines (C ++ 11/14/17 /…) (editado por Bjarne Stroustrup e Herb Sutter) é um documento online em evolução que consiste em um conjunto de diretrizes para usar bem o C ++ moderno. As diretrizes são focadas em problemas de nível relativamente alto, como interfaces, gerenciamento de recursos, gerenciamento de memória e simultaneidade, afetando a arquitetura de aplicativos e o design da biblioteca. O projeto foi anunciado na CppCon'15 por Bjarne Stroustrup e outros e recebe contribuições da comunidade. A maioria das diretrizes é complementada com uma justificativa e exemplos, bem como discussões de possíveis suportes de ferramentas. Muitas regras são projetadas especificamente para serem verificadas automaticamente por ferramentas de análise estática.

  • O C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup e outros) é um esforço da Standard C ++ Foundation para unificar as FAQs de C ++ previamente mantidas individualmente por Marshall Cline e Bjarne Stroustrup e também incorporando novas contribuições. Os itens abordam principalmente problemas em um nível intermediário e são frequentemente escritos com um tom bem-humorado. Nem todos os itens podem estar totalmente atualizados com a última edição do padrão C ++.

  • 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 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 na 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 Evolução do C ++ (Bjarne Stroustrup) Se você quer saber por que a linguagem é do jeito que é, este livro é onde você encontra as respostas. Isso cobre tudo antes da padronização do C ++.

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

  • Estilos e Expressões Avançadas de Programação em C ++ (James Coplien) Um predecessor do movimento de padrões, descreve muitos "idiomas" específicos para C ++. É certamente um livro muito bom e ainda pode valer a pena ler se você puder poupar o tempo, mas bastante antigo e não atualizado com o C ++ atual.

  • Design de Software de C ++ em Grande Escala (John Lakos) Lakos explica técnicas para gerenciar projetos de software C ++ muito grandes. Certamente, uma boa leitura, se fosse apenas atualizado. Ele foi escrito muito antes do C ++ 98 e falha em muitos recursos (por exemplo, namespaces) importantes para projetos de larga escala. Se você precisa trabalhar em um projeto de software C ++ grande, você pode querer lê-lo, embora você precise levar mais do que um grão de sal com ele. O primeiro volume de uma nova edição é esperado em 2018 .

  • Dentro do Modelo de Objeto C ++ (Stanley Lippman) Se você quiser saber como as funções de membros virtuais são comumente implementadas e como os objetos base são comumente expostos na memória em um cenário de herança múltipla, e como tudo isso afeta o desempenho, é aqui que você encontrar 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 no fato de que ele explora a versão C ++ 2.0 de 1989 - Modelos, exceções, namespaces e novos lançamentos ainda não foram introduzidos. Dizendo que, no entanto, este livro analisa 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 princípios e padrões de programação em C ++, mas para entender todos os aspectos da linguagem C ++.

  • Pensando em C ++ (Bruce Eckel, 2nd Edition, 2000). Dois volumes; é um conjunto gratuito de livros de nível de introdução. Downloads: vol 1 , vol 2 . Infelizmente, eles são prejudicados por vários erros triviais (por exemplo, manutenção de que os temporários são automaticamente const ), sem nenhuma lista oficial de erratas. Uma lista parcial de erratas de terceiros está disponível em ( http://www.computersciencelab.com/Eckel.htm ), mas aparentemente não é mantida.

  • Científico e Engenharia C ++: Uma Introdução às Técnicas Avançadas e Exemplos (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 Curky Recurring Template Pattern (CRTP, também chamado de truque de Barton-Nackman). Foi pioneiro em várias técnicas, como análise dimensional e diferenciação automática. Ele veio com muitos códigos compiláveis ​​e úteis, variando de um analisador de expressões a um wrapper do 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 um 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 movimento e as lições aprendidas do STL seria muito bom.





c++-faq