De definitieve C++-boekengids en lijst

Deze vraag probeert de paar 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 op internet, zijn maar weinigen in staat om C++ snel op te pikken zonder een goed geschreven C++-boek te bestuderen. Daarvoor is het veel te groot en complex. In feite is het zo groot en complex, dat er heel veel zeer slechte C++-boeken zijn. En dan hebben we het niet over een slechte stijl, maar over zaken als overduidelijke feitelijke fouten en het promoten van verschrikkelijk slechte programmeerstijlen.

Bewerk het geaccepteerde antwoord om kwaliteitsboeken en een geschat vaardigheidsniveau te geven bij voorkeur na nadat u uw toevoeging heeft besproken in de C++-chatroom. (De vaste klanten kunnen je werk genadeloos ongedaan maken als ze het niet eens zijn met een aanbeveling.) Voeg een korte blurb/beschrijving toe over elk boek dat je persoonlijk hebt gelezen/waarvan je hebt geprofiteerd. Voel je vrij om te discussiëren over kwaliteit, kopjes, enz. Boeken die aan de criteria voldoen, worden aan de lijst toegevoegd. Boeken met recensies van de Association of C and C++ Users (ACCU) hebben links naar de recensie.

*Opmerking: Veelgestelde vragen en andere bronnen zijn te vinden in de C++-taginfo en onder .


Antwoord 1, autoriteit 100%

Beginner

Inleidend, geen eerdere programmeerervaring

  • C++ Primer * (Stanley Lippman, Josee Lajoie en Barbara E. Moo) (bijgewerkt voor C++11) Met 1k pagina’s is dit een zeer grondige introductie in C++ die ongeveer alles in de taal in een zeer toegankelijk formaat en tot in detail. De vijfde editie (uitgebracht op 16 augustus 2012) behandelt C++11. [Review]

    * Niet te verwarren met C++ Primer Plus (Stephen Prata), met een aanzienlijk minder gunstige recensie.

  • Programmeren: principes en oefenen met C++ (Bjarne Stroustrup, 2e editie – 25 mei 2014) (bijgewerkt voor C++11/C++14) Een inleiding tot programmeren met C++ door de maker van de taal. Een goed boek dat geen eerdere programmeerervaring veronderstelt, maar niet alleen voor beginners is.

Inleidend, met eerdere programmeerervaring

  • Een rondleiding door C++ (Bjarne Stroustrup) (2e editie voor C++17) De ‘tour’ is een snel (ongeveer 180 pagina’s en 14 hoofdstukken) zelfstudieoverzicht van alle standaard C++ (taal en standaardbibliotheek, en het gebruik van C+) +11) op een redelijk hoog niveau voor mensen die C++ al kennen of in ieder geval ervaren programmeurs zijn. Dit boek is een uitgebreide versie van het materiaal dat de hoofdstukken 2-5 vormt van The C++ Programming Language, 4e editie.

  • Versnelde C++ (Andrew Koenig en Barbara Moo, 1e editie – 24 augustus 2000) Dit bestrijkt in principe hetzelfde terrein als de C++ Primer, maar doet dit in een kwart van zijn ruimte. Dit komt grotendeels omdat het geen introductie tot programmeren is, maar een introductie 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 introductie tot de taal. (Historisch gezien was het baanbrekend door het eerste beginnersboek te zijn dat een moderne benadering van het onderwijzen van de taal gebruikte.) Desondanks is de C++
    het leert dat het puur C ++ 98 is. [Review]

Praktische tips

  • Effectieve C++ (Scott Meyers, 3e editie – 22 mei 2005) Dit is geschreven met als doel het beste tweede boek te zijn dat C++-programmeurs zouden moeten lezen, en het is gelukt. Eerdere edities waren gericht op programmeurs afkomstig uit C, de derde editie brengt hier verandering in en is gericht op programmeurs afkomstig uit talen als Java. Het presenteert ~50 gemakkelijk te onthouden vuistregels samen met hun grondgedachte in een zeer toegankelijke (en plezierige) stijl. Voor C++11 en C++14 zijn de voorbeelden en enkele problemen achterhaald en zou Effectieve Moderne C++ de voorkeur moeten hebben. [Review]

  • Effectieve moderne C++ (Scott Meyers) Dit is in feite de nieuwe versie van Effective C++, bedoeld voor C++-programmeurs die de overstap maken van C++03 naar C++11 en C++14.

  • Effectieve STL (Scott Meyers) Dit heeft tot doel hetzelfde te doen met het deel van de standaardbibliotheek dat uit de STL komt wat Effective C++ deed met de taal als geheel: het presenteert vuistregels samen met hun redenering. [Review]


Gemiddeld

  • Effectievere C++ (Scott Meyers) Nog meer vuistregels dan Effectieve C++. Niet zo belangrijk als die in het eerste boek, maar toch goed om te weten.

  • Uitzonderlijke C++ (Herb Sutter) Gepresenteerd als een reeks puzzels, heeft dit een van de beste en grondige discussies over het juiste resourcebeheer en de veiligheid van uitzonderingen in C++ via Resource Acquisition is Initialization (RAII) naast een diepgaande dekking van een verscheidenheid aan andere onderwerpen, waaronder het pimpl-idioom, het opzoeken van namen, goed klassenontwerp en het C++-geheugenmodel. [Review]

  • Uitzonderlijkere C++ (Herb Sutter) Behandelt aanvullende veiligheidsonderwerpen voor uitzonderingen die niet worden behandeld in Exceptional C++, naast de bespreking van effectief objectgeoriënteerd programmeren in C++ en correct gebruik van de STL. [Review]

  • Uitzonderlijke C++-stijl (Herb Sutter) Bespreekt generieke programmering, optimalisatie en resourcebeheer; dit boek heeft ook een uitstekende uiteenzetting over het schrijven van modulaire code in C++ door gebruik te maken van niet-ledenfuncties en het principe van één verantwoordelijkheid. [Review]

  • C++-coderingsnormen (Herb Sutter en Andrei Alexandrescu) “Codernormen” betekent hier niet “hoeveel spaties moet ik inspringen in mijn code?” Dit boek bevat 101 best practices, idiomen en veelvoorkomende valkuilen die u kunnen helpen bij het schrijven correcte, begrijpelijke en efficiënte C++-code. [Review]

  • C++-sjablonen: de complete gids (David Vandevoorde en Nicolai M. Josuttis) Dit is het boek over sjablonen zoals ze bestonden vóór C++11. Het behandelt alles van de basis tot enkele van de meest geavanceerde metaprogrammering van sjablonen en legt elk detail uit van hoe sjablonen werken (zowel conceptueel als hoe ze worden geïmplementeerd) en bespreekt veel veelvoorkomende valkuilen. Heeft uitstekende samenvattingen van de One Definition Rule (ODR) en overbelastingsresolutie in de bijlagen. Een tweede editie voor C++11, C+ +14 en C++17 is al gepubliceerd. [Review]

  • C++ 17 – The Complete Guide (Nicolai M. Josuttis) Dit boek beschrijft alle nieuwe functies die in de C++17-standaard zijn geïntroduceerd en omvat alles van de eenvoudige zoals ‘Inline Variables’, ‘constexpr if’ tot ‘Polymorphic Memory Resources’ en ‘New and Delete with overaligned Data’. [Review]

  • C++ in actie (Bartosz Milewski). Dit boek legt C++ en zijn functies uit door een applicatie vanaf de grond af te bouwen. [Review]

  • Functioneel programmeren in C++ (Ivan Cukic). Dit boek introduceert functionele programmeertechnieken voor moderne C++ (C++11 en later). Een erg leuk boek voor diegenen die functionele programmeerparadigma’s willen toepassen op C++.


Geavanceerd

  • Modern C++-ontwerp (Andrei Alexandrescu) Een baanbrekend boek over geavanceerde generieke programmeertechnieken. Introduceert op beleid gebaseerd ontwerp, typelijsten en fundamentele generieke programmeeridiomen en legt vervolgens uit hoeveel nuttige ontwerppatronen (inclusief kleine objecttoewijzers, functors, fabrieken, bezoekers en multi-methoden) efficiënt, modulair en netjes kunnen worden geïmplementeerd met behulp van generieke programmering . [Review]

  • C++-sjabloonmetaprogrammering (David Abrahams en Aleksey Gurtovoy)

  • C++ gelijktijdigheid in actie (Anthony Williams) Een boek over C++11-concurrency-ondersteuning, inclusief de threadbibliotheek, de atomics-bibliotheek, het C++-geheugenmodel, vergrendelingen en mutexen, evenals problemen met het ontwerpen en debuggen van multithreaded-toepassingen. Een tweede editie over C++14 en C+ +17 is al gepubliceerd. [Review]

  • Geavanceerde C++-metaprogrammering (Davide Di Gennaro) Een pre-C++11 handleiding met TMP-technieken, meer gericht op praktijk dan op theorie. Er zijn een heleboel fragmenten in dit boek, waarvan sommige verouderd zijn door typekenmerken, maar de technieken zijn niettemin nuttig om te weten. Als je de eigenzinnige opmaak / bewerking kunt verdragen, is het gemakkelijker te lezen dan Alexandrescu, en aantoonbaar meer lonend. Voor meer ervaren ontwikkelaars is de kans groot dat je iets oppikt over een donkere hoek van C++ (een eigenaardigheid) die meestal alleen tot stand komt door uitgebreide ervaring.

  • Large Scale C++ volume I, Process and architecture (John Lakos). Deel één van een driedelige serie die het oudere boek ‘Large Scale C++ Design’ uitbreidt.
    Lakos legt gevechtsgeteste technieken uit om zeer grote C++-softwareprojecten te beheren. Als je in een groot C++-softwareproject werkt, is dit een geweldige lectuur, waarin de relatie tussen fysieke en logische structuur, strategieën voor componenten en hun hergebruik wordt beschreven.


Referentiestijl – Alle niveaus

  • De programmeertaal C++ (Bjarne Stroustrup) (bijgewerkt voor C++11) De klassieke introductie tot C++ door de maker ervan. Geschreven om parallel te lopen met de klassieke K&R, lijkt dit inderdaad erg op het en omvat zo ongeveer alles, van de kerntaal tot de standaardbibliotheek, tot programmeerparadigma’s tot de filosofie van de taal. [Review] Opmerking: alle releases van de C++-standaard worden bijgehouden in de vraag "Waar vind ik de huidige C- of C++-standaarddocumenten?".

  • C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (bijgewerkt voor C++11) De introductie en referentie voor de C++ Standard Library. De tweede editie (uitgebracht op 9 april 2012) behandelt C++11. [Review]

  • De C++ IO-streams en locales (Angelika Langer en Klaus Kreft) Er is heel weinig te zeggen over dit boek, behalve dat, als je iets wilt weten over streams en locales, dit de enige plek is om definitieve antwoorden te vinden. [Review]

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. Houd er echter rekening mee dat het puur bedoeld is als referentie voor ervaren gebruikers die bereid zijn veel tijd en moeite te steken in het begrijpen ervan. De C++17-standaard wordt in elektronische vorm vrijgegeven voor 198 Zwitserse frank.

  • De C++17-standaard is beschikbaar, maar schijnbaar niet in een economische vorm rechtstreeks van de ISO het kost 198 Zwitserse Franken (ongeveer $ 200 US). Voor de meeste mensen is het definitieve concept vóór standaardisatie is meer dan voldoende (en gratis). Velen geven de voorkeur aan een nog nieuwer concept , documenteert nieuwe functies die waarschijnlijk in C++20 zullen worden opgenomen.

  • Overzicht van de nieuwe C++ (C++11/14) (alleen PDF) (Scott Meyers) (bijgewerkt voor C++14) Dit is het presentatiemateriaal (slides en enkele aantekeningen) van een driedaagse training aangeboden door Scott Meyers, wie is een zeer gerespecteerde auteur op C++. Hoewel de lijst met items kort is, is de kwaliteit hoog.

  • De C++ Core-richtlijnen (C++11/14/ 17/ ) (bewerkt door Bjarne Stroustrup en Herb Sutter) is een evoluerend online document dat bestaat uit een reeks richtlijnen voor een goed gebruik van modern C++. De richtlijnen zijn gericht op kwesties van relatief hoger niveau, zoals interfaces, resourcebeheer, geheugenbeheer en gelijktijdigheid die van invloed zijn op de toepassingsarchitectuur en het bibliotheekontwerp. 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 onderbouwing en voorbeelden, evenals besprekingen van mogelijke toolondersteuning. Veel regels zijn speciaal ontworpen om automatisch gecontroleerd te worden door statische analysetools.

  • 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 individueel werden onderhouden door Marshall Cline en Bjarne Stroustrup, samen te brengen en ook nieuwe bijdragen op te nemen. De items behandelen meestal problemen op een gemiddeld niveau en zijn vaak met een humoristische toon geschreven. Mogelijk zijn nog niet alle items volledig up-to-date met de nieuwste editie van de C++-standaard.

  • cppreference.com (C++03/11/14/17/ ) (geïnitieerd door Nate Kohl) is een wiki die de basisfuncties van de kerntaal samenvat en uitgebreide documentatie heeft van de C++-standaardbibliotheek. De documentatie is zeer nauwkeurig, maar is gemakkelijker te lezen dan het officiële standaarddocument en biedt betere navigatie vanwege het wiki-karakter. Het project documenteert alle versies van de C++-standaard en de site maakt het mogelijk om de weergave op een specifieke versie te filteren. Het project was gepresenteerd door Nate Kohl op CppCon’14.


Klassiek/Ouder

Opmerking: sommige informatie in deze boeken is mogelijk niet up-to-date of wordt niet langer als de beste praktijk beschouwd.

  • Het ontwerp en de evolutie van C++ (Bjarne Stroustrup) Als je wilt weten waarom de taal is zoals hij is, dan is dit boek de plek waar je antwoorden vindt. Dit omvat alles vóór de standaardisatie van C++.

  • Overpeinzingen over C++ – (Andrew Koenig en Barbara Moo) [Review]

  • Geavanceerde C++-programmeerstijlen en -idiomen (James Coplien) Een voorloper van de patroonbeweging, het beschrijft veel C++-specifieke ‘idiomen’. Het is zeker een heel 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++.

  • Grootschalig C++-softwareontwerp (John Lakos) Lakos legt technieken uit om zeer grote C++-softwareprojecten te beheren. Zeker, goed te lezen, als het maar up-to-date was. Het is lang voor C++ 98 geschreven en mist veel functies (bijv. naamruimten) die belangrijk zijn voor grootschalige projecten. Als je in een groot C++-softwareproject moet werken, wil je het misschien lezen, hoewel je er meer dan een korreltje zout mee moet nemen. Niet te verwarren met de uitgebreide en latere boekenreeks Large Scale C++ volume I-III.

  • In het C++-objectmodel (Stanley Lippman) Als u wilt weten hoe functies van virtuele leden gewoonlijk worden geïmplementeerd en hoe basisobjecten gewoonlijk in het geheugen worden ingedeeld in een scenario met meerdere overervingen, en hoe dit alles de prestaties beïnvloedt, is dit waar vindt u grondige discussies over dergelijke onderwerpen.

  • De geannoteerde C++-referentiehandleiding (Bjarne Stroustrup, Margaret A. Ellis) Dit boek is behoorlijk achterhaald in het feit dat het de 1989 C++ 2.0-versie verkent – Sjablonen, uitzonderingen, naamruimten en nieuwe casts waren nog niet geïntroduceerd. Dit boek gaat echter door de hele C++-standaard van die tijd en legt de grondgedachte, de mogelijke implementaties en kenmerken van de taal uit. Dit is geen boek om programmeerprincipes en patronen op C++ te leren, maar om elk aspect van de C++-taal te begrijpen.

  • Denken in C++ (Bruce Eckel, 2e editie, 2000). Twee delen; is een gratis set van intro-niveauboeken in zelfstudiestijl. Downloads: vol 1, vol 2. Helaas worden ze ontsierd door een aantal triviale fouten (bijv. het handhaven dat tijdelijke bestanden automatisch const zijn), zonder officiële erratalijst. Een gedeeltelijke erratalijst van derden is beschikbaar op http://www.computersciencelab. com/Eckel.htm, maar het wordt blijkbaar niet onderhouden.

  • Wetenschappelijke en technische C++: een Inleiding tot geavanceerde technieken en voorbeelden (John Barton en Lee Nackman)
    Het is een uitgebreid en zeer gedetailleerd boek dat probeerde uit te leggen en gebruik te maken van alle functies die beschikbaar zijn in C++, 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 in verschillende technieken, zoals dimensionale analyse en automatische differentiatie.
    Het kwam met veel compileerbare en nuttige code, variërend van een expressie-parser tot een Lapack-wrapper.
    De code is nog steeds online beschikbaar.
    Helaas zijn de boeken qua stijl en C++-functies wat achterhaald, maar in die tijd (1994, pre-STL) was het een ongelooflijke krachttoer.
    De hoofdstukken over dynamische overerving zijn een beetje ingewikkeld om te begrijpen en niet erg nuttig.
    Een bijgewerkte versie van dit klassieke boek met bewegingssemantiek en de lessen die zijn geleerd van de STL zou erg leuk zijn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

9 + ten =

Other episodes