Deze vraag probeert de weinige parels te verzamelen tussen de tientallen slechte C++ boeken die elk jaar worden gepubliceerd.
In tegenstelling tot veel andere programmeertalen, die vaak onderweg worden opgepikt uit tutorials die op het internet zijn te vinden, zijn maar weinigen in staat om C++ snel onder de knie te krijgen zonder een goed geschreven C++ boek te bestuderen. Het is veel te groot en complex om dit te doen. Het is zelfs zo groot en complex, dat er heel veel zeer slechte C++ boeken bestaan. En dan hebben we het niet over een slechte stijl, maar over zaken als overduidelijke feitelijke onjuistheden en het aanprijzen van abominabel slechte programmeerstijlen.
Bewerk alstublieft het geaccepteerde antwoord om kwaliteit boeken en een geschat vaardigheidsniveau te geven - bij voorkeur __ na bespreking van uw toevoeging in de C++ chatroom. (De vaste klanten kunnen uw werk genadeloos ongedaan maken als ze het niet eens zijn met een aanbeveling). Voeg een korte beschrijving toe over elk boek dat u persoonlijk hebt gelezen of waar u profijt van hebt gehad. Voel je vrij om te discussiëren over kwaliteit, titels, etc. Boeken die aan de criteria voldoen zullen aan de lijst worden toegevoegd. Boeken die recensies hebben van de Association of C and C++ Users (ACCU) hebben links naar de recensie.
*Note: FAQs en andere bronnen zijn te vinden in de C++ tag info en onder [tag:c++-faq].
A Tour of C++](https://www.amazon.com/Tour-C-Depth-ebook/dp/B00F8CWGOS) (Bjarne Stroustrup) (2e editie voor C++17) De "tour" is een snel (ongeveer 180 pagina's en 14 hoofdstukken) tutorial overzicht van de hele standaard C++ (taal en standaard bibliotheek, en het gebruik van C++11) op een matig hoog niveau voor mensen die C++ al kennen of op zijn minst ervaren programmeurs zijn. Dit boek is een uitgebreide versie van het materiaal dat de hoofdstukken 2-5 vormt van The C++ Programming Language, 4th edition.
Accelerated C++](http://www.amazon.com/dp/020170353X/) (Andrew Koenig en Barbara Moo, 1e editie - 24 augustus 2000) Dit behandelt in principe hetzelfde terrein als de C++ Primer, maar doet dit op een vierde van zijn ruimte. Dit is grotendeels omdat het niet probeert een inleiding tot programmeren te zijn, maar een inleiding tot C++ voor mensen die'eerder in een andere taal hebben geprogrammeerd. Het heeft een steilere leercurve, maar, voor degenen die dit aankunnen, is het een zeer compacte inleiding tot de taal. (Historisch gezien is het baanbrekend omdat het het eerste beginnersboek is dat een moderne benadering van het onderwijzen van de taal gebruikt). Ondanks dit, de C++ die het onderwijst is puur C++98. [Recensie]
Effective C++](http://www.amazon.com/dp/0321334876/) (Scott Meyers, 3e Editie - 22 mei 2005) Dit is geschreven met het doel om het beste tweede boek te zijn dat C++ programmeurs zouden moeten lezen, en dat is gelukt. Eerdere edities waren gericht op programmeurs die uit C kwamen, de derde editie verandert dit en richt zich op programmeurs die uit talen als Java komen. Het presenteert ~50 gemakkelijk te onthouden vuistregels samen met hun rationale in een zeer toegankelijke (en plezierige) stijl. Voor C++11 en C++14 zijn de voorbeelden en een paar onderwerpen verouderd en Effective Modern C++ verdient de voorkeur. [Recensie]
Effective Modern C++]1 (Scott Meyers) Dit is in feite de nieuwe versie van Effective C++, gericht op C++ programmeurs die de overgang maken van C++03 naar C++11 en C++14.
More Effective C++](http://www.amazon.com/dp/020163371X/) (Scott Meyers) Nog meer vuistregels dan Effective C++. Niet zo belangrijk als die in het eerste boek, maar toch goed om te weten.
Exceptional C++](http://www.amazon.com/dp/0201615622/) (Herb Sutter) Dit boek, gepresenteerd als een serie puzzels, heeft een van de beste en grondigste discussies over het juiste resource management en exception safety in C++ door middel van Resource Acquisition is Initialization (RAII), naast een diepgaande behandeling van een verscheidenheid aan andere onderwerpen, waaronder het pimpl idioom, name lookup, goed klasse ontwerp, en het C++ geheugen model. [Recensie]
More Exceptional C++](http://www.amazon.com/dp/020170434X/) (Herb Sutter) Behandelt extra exceptionele veiligheidsonderwerpen die niet behandeld worden in Exceptional C++, naast de bespreking van effectief object-georiënteerd programmeren in C++ en correct gebruik van de STL. [Recensie]
Exceptional C++ Style](http://www.amazon.com/dp/0201760428/) (Herb Sutter) Bespreekt generiek programmeren, optimalisatie, en resource management; dit boek heeft ook een uitstekende uiteenzetting over hoe je modulaire code in C++ kunt schrijven door gebruik te maken van non-member functies en het single responsibility principe. [Recensie]](http://accu.org/index.php?module=bookreviews&func=search&rid=107)
C++ Coding Standards](http://www.amazon.com/dp/0321113586/) (Herb Sutter en Andrei Alexandrescu) "Coding standards" betekent hier'niet "hoeveel spaties moet ik mijn code laten inspringen?" Dit boek bevat 101 best practices, idiomen, en veel voorkomende valkuilen die u kunnen helpen correcte, begrijpelijke en efficiënte C++ code te schrijven. [Recensie]
C++ Templates: The Complete Guide](http://www.amazon.com/dp/0201734842/) (David Vandevoorde en Nicolai M. Josuttis) Dit is het boek over templates zoals die bestonden voor C++11. Het behandelt alles van de allereerste beginselen tot enkele van de meest geavanceerde template metaprogrammering en legt elk detail uit van hoe templates werken (zowel conceptueel als hoe ze zijn geïmplementeerd) en bespreekt veel voorkomende valkuilen. Heeft uitstekende samenvattingen van de One Definition Rule (ODR) en overload resolution in de appendices. Er is al een tweede editie verschenen die C++11, C++14 en C++17 beslaat. [Recensie]
Modern C++ Design](http://www.amazon.com/dp/0201704315/) (Andrei Alexandrescu) Een baanbrekend boek over geavanceerde generieke programmeertechnieken. Introduceert policy-based design, typelijsten, en fundamentele generic programming idiomen en legt vervolgens uit hoe vele bruikbare design patterns (inclusief kleine object allocators, functors, factories, visitors, en multi-methods) efficiënt, modulair, en schoon kunnen worden geïmplementeerd met behulp van generic programming. [Recensie]
C++ Template Metaprogramming (David Abrahams en Aleksey Gurtovoy)
C++ Concurrency In Action (Anthony Williams) Een boek over C++11 concurrency ondersteuning, inclusief de thread bibliotheek, de atomics bibliotheek, het C++ geheugenmodel, locks en mutexen, en problemen met het ontwerpen en debuggen van multithreaded applicaties. Een tweede editie over C++14 en C++17 is reeds gepubliceerd.
The C++ Programming Language](http://www.amazon.com/dp/0321958322/) (Bjarne Stroustrup) (bijgewerkt voor C++11) De klassieke introductie tot C++ door de maker ervan. Geschreven als parallel aan de klassieker K&R, leest dit boek er inderdaad erg op en behandelt zo'n beetje alles van de kern van de taal tot de standaard bibliotheek, van programmeer paradigma's tot de filosofie van de taal's. [Recensie] Opmerking: Alle uitgaven van de C++ standaard worden bijgehouden in deze vraag: Waar kan ik de huidige C++ standaard vinden.
C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (bijgewerkt voor C++11) De inleiding en referentie voor de C++ Standard Library. De tweede editie (uitgebracht op 9 april 2012) behandelt C++11. [Recensie]
The C++ IO Streams and Locales](http://www.amazon.com/dp/0201183951) (Angelika Langer en Klaus Kreft) Er valt heel weinig over dit boek te zeggen, behalve dat, als u iets wilt weten over streams en locales, dit de enige plaats is om definitieve antwoorden te vinden. [Recensie] C++11/14/17/... Referenties:
De C++11/14/17 Standaard (INCITS/ISO/IEC 14882:2011/2014/2017)_ Dit is natuurlijk de uiteindelijke arbiter van alles wat wel of niet C++ is. U moet zich er echter van bewust zijn dat deze norm uitsluitend bedoeld is als referentie voor ervaren gebruikers die bereid zijn veel tijd en moeite te besteden aan het begrijpen ervan. De C++17-norm wordt in elektronische vorm uitgebracht voor 198 Zwitserse Francs.
De C++17 standaard is beschikbaar, maar schijnbaar niet in een voordelige vorm - rechtstreeks van de ISO kost het 198 Zwitserse Francs (ongeveer $200 US). Voor de meeste mensen is het laatste ontwerp vóór standaardisatie meer dan voldoende (en gratis). Velen zullen de voorkeur geven aan een nog nieuwer ontwerp, waarin nieuwe mogelijkheden worden gedocumenteerd die waarschijnlijk in C++20 zullen worden opgenomen.
Overzicht van de Nieuwe C++ (C++11/14) (alleen PDF)](http://www.artima.com/shop/overview_of_the_new_cpp) (Scott Meyers) (bijgewerkt voor C++14) Dit is het presentatiemateriaal (dia's en wat aantekeningen bij lezingen) van een driedaagse cursus die werd gegeven door Scott Meyers, die een zeer gerespecteerd auteur is over C++. Hoewel de lijst van items kort is, is de kwaliteit hoog.
De C++ Core Guidelines (C++11/14/17/...) (geredigeerd door Bjarne Stroustrup en Herb Sutter) is een evoluerend online document dat bestaat uit een set richtlijnen voor het goed gebruiken van moderne C++. De richtlijnen zijn gericht op relatief hogere zaken, zoals interfaces, resource management, memory management en concurrency die van invloed zijn op de architectuur van applicaties en het ontwerp van bibliotheken. Het project werd aangekondigd op CppCon'15 door Bjarne Stroustrup en anderen en verwelkomt bijdragen van de gemeenschap. De meeste richtlijnen worden aangevuld met een rationale en voorbeelden, evenals discussies over mogelijke ondersteuning door gereedschappen. Veel regels zijn speciaal ontworpen om automatisch gecontroleerd te kunnen worden door statische analyse gereedschappen.
De C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup en anderen) is een poging van de Standard C++ Foundation om de C++ FAQ's die voorheen afzonderlijk door Marshall Cline en Bjarne Stroustrup werden bijgehouden, te verenigen en ook nieuwe bijdragen op te nemen. De items behandelen meestal problemen op een gemiddeld niveau en zijn vaak geschreven met een humoristische toon. Het is mogelijk dat nog niet alle items volledig up-to-date zijn met de laatste editie van de C++ standaard.
Note: Sommige informatie in deze boeken is mogelijk niet up-to-date of wordt niet langer beschouwd als de beste praktijk.
The Design and Evolution of C++](http://www.amazon.com/dp/0201543303/) (Bjarne Stroustrup) Als u wilt weten waarom de taal is zoals hij is, dan is dit het boek waar u antwoorden vindt. Dit behandelt alles vóór de standaardisatie van C++.
Ruminations on C++](http://www.amazon.com/dp/0201423391/) - (Andrew Koenig en Barbara Moo) [Review]
Advanced C++ Programming Styles and Idioms](http://www.amazon.com/dp/0201548550/) (James Coplien) Een voorloper van de pattern movement, het beschrijft vele C++-specifieke "idiomen". Het is zeker een zeer goed boek en misschien nog steeds de moeite waard om te lezen als je de tijd hebt, maar vrij oud en niet up-to-date met de huidige C++.
Large Scale C++ Software Design](http://www.amazon.com/dp/0201633620) (John Lakos) Lakos legt technieken uit om zeer grote C++ software projecten te beheren. Zeker goed leesvoer, als het maar up to date was. Het is geschreven lang voor C++ 98 en mist veel features (b.v. namespaces) die belangrijk zijn voor grootschalige projecten. Als u in een groot C++-softwareproject moet werken, wilt u het misschien lezen, hoewel u het met meer dan een korreltje zout moet nemen. Het eerste deel van een nieuwe editie is verwacht in 2019.
Inside the C++ Object Model](http://www.amazon.com/dp/0201834545) (Stanley Lippman) Als u wilt weten hoe virtuele member functies gewoonlijk worden geïmplementeerd en hoe basisobjecten gewoonlijk in het geheugen worden geplaatst in een multi-inheritance scenario, en hoe dit alles de performance beïnvloedt, dan is dit de plek waar u grondige discussies van dergelijke onderwerpen zult vinden.
The Annotated C++ Reference Manual](https://www.amazon.com/Annotated-C-Reference-Manual/dp/0201514591) (Bjarne Stroustrup, Margaret A. Ellis) Dit boek is nogal verouderd in het feit dat het de C++ 2.0 versie van 1989 behandelt - templates, exceptions, namespaces en nieuwe casts waren nog niet geïntroduceerd. Dat gezegd hebbende, gaat dit boek door de hele C++ standaard van die tijd heen, met uitleg over de rationale, de mogelijke implementaties, en de mogelijkheden van de taal. Dit is geen boek om programmeerprincipes en patronen in C++ te leren, maar om elk aspect van de C++ taal te begrijpen.
Thinking in C++](http://www.amazon.com/dp/0139798099/) (Bruce Eckel, 2e Editie, 2000). Twee delen; is een tutorial stijl gratis set van intro niveau boeken. Downloads: vol 1, vol 2. Helaas worden ze ontsierd door een aantal triviale fouten (b.v. beweren dat temporaries automatisch const
zijn), zonder een officiële errata lijst. Een gedeeltelijke 3rd partij errata lijst is beschikbaar op (http://www.computersciencelab.com/Eckel.htm), maar deze wordt blijkbaar niet onderhouden.
Scientific and Engineering C++: An Introduction to Advanced Techniques and Examples (John Barton en Lee Nackman) Het is een uitgebreid en zeer gedetailleerd boek dat probeerde alle mogelijkheden van C++ uit te leggen en te gebruiken, in de context van numerieke methoden. Het introduceerde destijds verschillende nieuwe technieken, zoals het Curiously Recurring Template Pattern (CRTP, ook wel Barton-Nackman truc genoemd). Het was een pionier op het gebied van verschillende technieken, zoals dimensionale analyse en automatische differentiatie. Het werd geleverd met veel compileerbare en nuttige code, variërend van een expressieparser tot een Lapack-wrapper. De code is hier nog steeds beschikbaar: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Helaas zijn de boeken wat verouderd qua stijl en C++ mogelijkheden, maar het was een ongelooflijke tour-de-force in die tijd (1994, pre-STL). De hoofdstukken over dynamische overerving zijn een beetje ingewikkeld om te begrijpen en niet erg nuttig. Een bijgewerkte versie van dit klassieke boek met move semantics en de lessen die geleerd zijn van de STL zou erg mooi zijn.