Esta pergunta tenta recolher as poucas pérolas entre as dezenas de maus livros em C++ que são publicados todos os anos.
Ao contrário de muitas outras linguagens de programação, que muitas vezes são pegas em viagem a partir de tutoriais encontrados na Internet, poucos são capazes de pegar C++ rapidamente sem estudar um livro C++ bem escrito. É muito grande e complexo para fazer isso. Na verdade, é tão grande e complexo, que ___ há muitos livros em C++ muito maus por aí. E nós não estamos falando de estilo ruim, mas de coisas como erros factuais glaringly óbvios do esporte e promoting abysmally bad programming styles.
Por favor, edite a resposta aceita para fornecer livros de qualidade e um nível de habilidade aproximado - _preferivelmente depois discutindo sua adição em a sala de bate-papo C++. (Os regulares podem impiedosamente desfazer o seu trabalho se discordarem de uma recomendação). Adicione um pequeno resumo/descrição sobre cada livro que você tenha lido/beneficiado pessoalmente. Sinta-se à vontade para debater a qualidade, títulos, etc. Os livros que preencherem os critérios serão adicionados à lista. Os livros que têm resenhas da Associação de Usuários C e C++ (ACCU) têm links para a resenha.
*Note: As FAQs e outros recursos podem ser encontrados em C++ tag info e em [tag:c++-faq].
A Tour of C++ (Bjarne Stroustrup) (2ª edição para C++17) O "tour" é um rápido (cerca de 180 páginas e 14 capítulos) tutorial com uma visão geral de todos os C++ padrão (linguagem e biblioteca padrão, **e usando C++11***) a 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.
Accelerated C++ (Andrew Koenig e Barbara Moo, 1ª edição - 24 de agosto de 2000) Isto basicamente cobre o mesmo terreno que o C++ Primer, mas o faz em um quarto de seu espaço. Isto é em grande parte porque não tenta ser uma introdução à programação, mas uma introdução ao C++ para pessoas que já programaram anteriormente em alguma outra língua. Tem uma curva de aprendizagem mais acentuada, mas, para aqueles que conseguem lidar com isto, é uma introdução muito compacta à língua. (Historicamente, ele rompeu um novo caminho ao ser o primeiro livro para iniciantes a usar uma abordagem moderna para o ensino da língua). Apesar disso, o C++ ensina é puramente C++98. [Revisão]
(http://www.amazon.com/dp/0321334876/) (Scott Meyers, 3ª Edição - 22 de maio de 2005) Este foi escrito com o objetivo de ser o melhor segundo livro que os programadores de C+++ deveriam ler, e foi bem sucedido. As edições anteriores eram 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 de fácil memorização, juntamente com sua lógica, em um estilo muito acessível (e agradável). Para C++11 e C++14 os exemplos e algumas edições estão desatualizados e C+++ Moderno Eficaz deve ser preferido. [Revisão]
Esta é basicamente a nova versão de Effective C+++, destinada aos programadores C+++ que fazem a transição de C+++03 para C+++11 e C+++14.
Mais Efetivo C++ (Scott Meyers) Ainda mais regras do polegar que Efetivo C++. Não tão importantes como as do primeiro livro, mas ainda assim é bom saber.
(http://www.amazon.com/dp/0201615622/) (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++ através da Aquisição de Recursos é a Inicialização (RAII), além de uma cobertura profunda de uma variedade de outros tópicos, incluindo o idioma pimpl, busca de nomes, bom design de classe e o modelo de memória C++. [Revisão]
(Herb Sutter) Cobre tópicos adicionais de segurança de exceção não cobertos em Excepcional C++, além de discussão de programação orientada a objetos em C++ e uso correto do STL. [Revisão]
(http://www.amazon.com/dp/0201760428/) (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 de não-membros e o princípio da responsabilidade única. [Revisão]
C++ Padrões de codificação (Herb Sutter e Andrei Alexandrescu) "Padrões de codificação" aqui não significa "quantos espaços devo indentar o meu código?" Este livro contém 101 melhores práticas, expressões idiomáticas e armadilhas comuns que podem ajudá-lo a escrever um código C++ correto, compreensível e eficiente. [Revisão]
(http://www.amazon.com/dp/0201734842/) (David Vandevoorde e Nicolai M. Josuttis) Este é o livro sobre templates como eles existiam antes de C++11. Ele cobre tudo desde o básico até algumas das mais avançadas metaprogramações de templates e explica cada detalhe de como os templates funcionam (tanto conceitualmente quanto na forma como 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. [Revisão]
Modern C++ Design (Andrei Alexandrescu) Um livro pioneiro sobre técnicas avançadas de programação genérica. Introduz o design baseado em políticas, listas de tipos e expressões fundamentais de programação genérica 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 forma eficiente, modular e limpa usando programação genérica. [Revisão]
C++ Metaprogramação de Modelos (David Abrahams e Aleksey Gurtovoy)
C++ Concurrency In Action (Anthony Williams) Um livro que cobre o suporte à concorrência C++11, incluindo a biblioteca de tópicos, a biblioteca atômica, o modelo de memória C++, fechaduras e mutexes, bem como questões de design e depuração de aplicações multithreaded. Uma segunda edição cobrindo C++14 e C++17 já foi publicada.
A Linguagem de Programação C++ (Bjarne Stroustrup) (actualizado para C+++11) A clássica introdução ao C++ pelo seu criador. Escrita em paralelo com a clássica K&R, esta realmente lê-se muito parecida e cobre praticamente tudo, desde a linguagem central até a biblioteca padrão, passando pelos paradigmas de programação até a filosofia da linguagem. [Revisão] Nota: Todos os lançamentos do padrão C++ são rastreados nesta questão: Onde posso encontrar o padrão C++ atual.
C++ Tutorial e Referência da Biblioteca Standard (Nicolai Josuttis) (actualizado para C+++11) A introdução e referência para a Biblioteca Standard C++. A segunda edição (lançada em 9 de abril de 2012) cobre o C++11. [Revisão]
(http://www.amazon.com/dp/0201183951) (Angelika Langer e Klaus Kreft) Há muito pouco a dizer sobre este livro, exceto que, se você quiser saber alguma coisa sobre riachos e locais, então este é o único lugar para encontrar respostas definitivas. [Revisão] C+++11/14/17/... Referências:
O C++11/14/17 Standard (INCITS/ISO/IEC 14882:2011/2014/2017)_ Este, naturalmente, é o árbitro final de tudo o que é ou não é C++. Esteja ciente, no entanto, de que ele pretende ser apenas 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 para 198 Francos Suíços.
A norma C+++17 está disponível, mas aparentemente não numa forma económica - directamente da ISO custa 198 Francos Suíços (cerca de $200 US). Para a maioria das pessoas, o esboço 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.
Overvisão do Novo C++ (C++11/14) (apenas PDF) (Scott Meyers) (actualizado para C++14) Estes são os materiais de apresentação (slides e algumas notas de palestra) de um curso de treinamento de três dias oferecido por Scott Meyers, que é um autor altamente respeitado em C++. Embora a lista de itens seja curta, a qualidade é alta.
As C+++ Diretrizes Essenciais (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 o uso do poço C++ moderno. As diretrizes estão focadas em questões de nível relativamente mais alto, tais como interfaces, gerenciamento de recursos, gerenciamento de memória e concorrência que afetam a arquitetura da aplicação 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 fundamentação e exemplos, assim como discussões sobre possíveis ferramentas de suporte. 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 Fundação Standard C++ para unificar as FAQs C++ anteriormente mantidas individualmente pela 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 são frequentemente escritos com um tom humorístico. Nem todos os itens podem estar totalmente atualizados com a última edição do padrão C++ ainda.
Nota: Algumas informações contidas nestes livros podem não estar atualizadas ou não serem mais consideradas melhores práticas.
The Design and Evolution of C++ (Bjarne Stroustrup) Se você quer saber porquê a linguagem é do jeito que é, este livro é onde você encontra respostas. Isto cobre tudo antes da padronização do C++.
Ruminations on C++ - (Andrew Koenig e Barbara Moo) [Revisão]
(http://www.amazon.com/dp/0201548550/) (James Coplien) Um predecessor do movimento padrão, descreve muitas "expressões idiomáticas" específicas do C++. É certamente um livro muito bom e ainda pode valer a pena ser lido se você puder dispensar o tempo, mas bastante antigo e não atualizado com o C++ atual.
Large Scale C++ Software Design (John Lakos) Lakos explica técnicas para gerenciar projetos de software C++ muito grandes. Certamente, uma boa leitura, se estivesse apenas atualizada. Ele foi escrito muito antes do C++ 98 e falha em muitos recursos (por exemplo, namespaces) importantes para projetos de grande escala. Se você precisa trabalhar em um grande projeto de software C++, 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 2019.
Se você quiser saber como as funções dos membros virtuais são comumente implementadas e como os objetos base são comumente dispostos em memória em um cenário de multi-heritância, e como tudo isso afeta o desempenho, é aqui que você encontrará discussões detalhadas sobre tais tópicos.
Manual de Referência Anotado C++_](https://www.amazon.com/Annotated-C-Reference-Manual/dp/0201514591) (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 casts ainda não foram introduzidos. Dizendo que, no entanto, este livro percorre todo o padrão C++ da época explicando a lógica, as possíveis implementações, e as características da linguagem. Este não é um livro para aprender princípios e padrões de programação em C++, mas para compreender todos os aspectos da linguagem C++.
Pensando em C++](http://www.amazon.com/dp/0139798099/) (Bruce Eckel, 2ª Edição, 2000). Dois volumes; é um conjunto tutorial estilo livre de livros de nível introdutório. Downloads: vol 1, vol 2. Infelizmente eles’são manchados por uma série de erros triviais (por exemplo, manter que os temporários são automaticamente `const'), sem uma lista oficial de erratas. Uma lista de erratas parcial 3rd party errata list está disponível em (http://www.computersciencelab.com/Eckel.htm), mas ela’s aparentemente não é mantida.
Cientifico e Engenharia C++: An Introduction to Advanced Techniques and Examples](https://www.amazon.com/Scientific-Engineering-Introduction-Advanced-Techniques/dp/0201533936) (John Barton e Lee Nackman) É um livro abrangente e muito detalhado que tentou explicar e fazer uso de todas as funcionalidades disponíveis em C++, no contexto dos métodos numéricos. Ele introduziu na época várias novas técnicas, como o Curiosamente Recorrente Padrão de Modelo (CRTP, também chamado de truque Barton-Nackman). Foi pioneiro em várias técnicas, como a análise dimensional e a diferenciação automática. Veio com muito código compilável e útil, desde um analisador de expressões até uma embalagem 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 tornaram-se um pouco ultrapassados no estilo e características do C++, no entanto, foi um tour-de-force incrível na época (1994, pré-STL). Os capítulos sobre herança dinâmica são um pouco complicados de entender e não muito úteis. Uma versão atualizada deste livro clássico que inclui a semântica do movimento e as lições aprendidas com o STL seria muito agradável.