Vraag De Definitieve C ++ -gids en -lijst voor boeken


Deze vraag probeert de paar parels te verzamelen uit de tientallen slechte C ++ -boeken die elk jaar worden gepubliceerd.

In tegenstelling tot veel andere programmeertalen, die vaak onderweg worden opgehaald van tutorials die op internet te vinden zijn, kunnen maar een paar C ++ snel oprapen zonder een goed geschreven C ++ -boek te bestuderen. Het is veel te groot en ingewikkeld om dit te doen. In feite is het zo groot en complex dat er zijn heel veel heel slechte C ++ -boeken buiten. En we hebben het niet over slechte stijl, maar dingen als sport overduidelijk evidente feitelijke fouten en het bevorderen van abysmisch slechte programmeerstijlen.

Bewerk het geaccepteerde antwoord om te bieden kwaliteitsboeken en een geschat vaardigheidsniveau - bij voorkeur  na  bespreken van uw toevoeging in de C ++ chatroom. (De vaste medewerkers 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 debatteren over kwaliteit, rubrieken, enz. Boeken die aan de criteria voldoen, zullen aan de lijst worden toegevoegd. Boeken met beoordelingen door de vereniging van C- en C ++ -gebruikers (ACCU) hebben koppelingen naar de beoordeling.

* Opmerking: veelgestelde vragen en andere bronnen zijn te vinden in de C ++ tag info en onder .


4253


oorsprong


antwoorden:


Beginner

Inleidend, geen eerdere programmeerervaring

  • C ++ Primer * (Stanley Lippman, Josée Lajoie en Barbara E. Moo) (bijgewerkt voor C ++ 11) Komt op 1K-pagina's, dit is een zeer grondige inleiding in C ++ dat zowat alles in de taal beslaat in een zeer toegankelijke vorm en tot in de kleinste details. De vijfde editie (uitgebracht op 16 augustus 2012) heeft betrekking op C ++ 11. [Beoordeling] 

  • Programmeren: principes en praktijk met behulp van C ++ (Bjarne Stroustrup, 2e druk - 25 mei 2014) (bijgewerkt voor C ++ 11 / C ++ 14) Een inleiding tot het programmeren met C ++ door de maker van de taal. Goed gelezen, dat uitgaat van een eerdere programmeerervaring, maar niet alleen voor beginners.

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

Inleidend, met eerdere programmeerervaring

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

  • Versnelde C ++ (Andrew Koenig en Barbara Moo, 1e druk - 24 augustus 2000) Dit omvat eigenlijk dezelfde grond als de C ++ Primer, maar doet dat op een vierde van zijn ruimte. Dit komt grotendeels omdat het niet probeert een introductie te zijn programmering, maar een inleiding tot C ++ voor mensen die eerder in een andere taal hebben geprogrammeerd. Het heeft een steilere leercurve, maar voor degenen die hiermee om kunnen gaan, is het een zeer compacte inleiding tot de taal. (Historisch gezien brak het nieuw terrein aan door als eerste beginnersboek een moderne benadering te gebruiken voor het onderwijzen van de taal.) Desondanks heeft de C ++ het leert is puur C ++ 98. [Beoordeling]

Beste praktijken

  • 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 bedoeld voor programmeurs afkomstig van C, de derde editie wijzigt dit en is bedoeld voor programmeurs afkomstig uit talen zoals Java. Het presenteert ~ 50 gemakkelijk te onthouden vuistregels samen met hun beweegredenen in een zeer toegankelijke (en plezierige) stijl. Voor C ++ 11 en C ++ 14 zijn de voorbeelden en enkele problemen verouderd en moet Effective Modern C ++ de voorkeur hebben. [Beoordeling]

  • Effectieve moderne C ++ (Scott Meyers) Dit is eigenlijk de nieuwe versie van Effectieve C ++, gericht op C ++ programmeurs die de overstap maken van C ++ 03 naar C ++ 11 en C ++ 14.

  • Effectieve STL (Scott Meyers) Dit wil hetzelfde doen met het deel van de standaardbibliotheek dat afkomstig is van het STL-wat Effectieve C ++ deed de taal als geheel: het presenteert vuistregels samen met hun beweegredenen. [Beoordeling]

tussen-

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

  • Uitzonderlijke C ++ (Herb Sutter) Gepresenteerd als een verzameling puzzels, dit heeft een van de beste en grondige besprekingen van het juiste bronnenbeheer en de uitzonderingsveiligheid in C ++ via Resource Acquisition is Initialization (RAII), naast een diepgaande dekking van een verscheidenheid aan andere onderwerpen zoals het pimpl-idioom, naam opzoeken, goed klasse ontwerp en het C ++ geheugenmodel. [Beoordeling]

  • Meer uitzonderlijke C ++ (Herb Sutter) Omvat aanvullende veiligheidsuitzonderingen die niet worden behandeld in Uitzonderlijke C ++, naast de bespreking van effectief objectgeoriënteerd programmeren in C ++ en correct gebruik van de STL. [Beoordeling]

  • 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 het gebruik van niet-lidfuncties en het beginsel van één enkele verantwoordelijkheid. [Beoordeling]

  • C ++ coderingsnormen (Herb Sutter en Andrei Alexandrescu) "Codeerstandaarden" betekent hier niet "hoeveel plaatsen moet ik mijn code laten inspringen?" Dit boek bevat 101 best practices, idiomen en veelvoorkomende valkuilen die je kunnen helpen om correct, begrijpelijk en correct te schrijven efficiënte C ++-code. [Beoordeling]

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


gevorderd

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

  • C ++ Template Metaprogrammering (David Abrahams en Aleksey Gurtovoy)

  • C ++ Concurrency in actie (Anthony Williams) Een boek over de concurrency-ondersteuning voor C ++ 11, inclusief de threadbibliotheek, de atomicabibliotheek, het C ++ -geheugenmodel, sloten en mutexen, evenals problemen met het ontwerpen en debuggen van multithread-toepassingen.

  • Geavanceerde C ++ Metaprogrammering (Davide Di Gennaro) Een pre-C ++ 11 handleiding van TMP-technieken, meer gericht op oefenen dan 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 kunt opmaken met de eigenzinnige opmaak / bewerking, is het gemakkelijker om te lezen dan Alexandrescu, en misschien wel meer lonend. Voor meer ervaren ontwikkelaars is de kans groot dat je iets ophaalt over een donkere hoek van C ++ (een gril) die meestal alleen door uitgebreide ervaring tot stand komt.


Referentiestijl - Alle niveaus

  • De C ++ programmeertaal (Bjarne Stroustrup) (bijgewerkt voor C ++ 11) De klassieke inleiding tot C ++ door de maker. Geschreven om parallel te lopen met de klassieke K & R, dit leest inderdaad heel veel zoals het en bestrijkt zo ongeveer alles, van de kerntaal tot de standaardbibliotheek, tot programmeerparadigma's tot de filosofie van de taal. [Beoordeling] Opmerking: alle releases van de C ++ -standaard worden bijgehouden in deze vraag: Waar vind ik de huidige C ++ -standaard.

  • 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) heeft betrekking op C ++ 11. [Beoordeling]

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

C ++ 11/14 Referenties:

  • De C ++-standaard (INCITS / ISO / IEC 14882-2011) Dit is natuurlijk de laatste arbiter van alles wat C ++ is of niet. Houd er echter rekening mee dat het puur bedoeld is als referentie voor ervaren gebruikers bereid zijn om veel tijd en moeite te besteden aan het begrip ervan. Zoals gewoonlijk was de eerste release heel duur ($ 300 + VS), maar het is nu vrijgegeven in elektronische vorm voor $ 60US.

  • De C ++ 14-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 de definitieve diepgang vóór standaardisatie is meer dan voldoende (en gratis). Velen geven de voorkeur aan een nog nieuwere diepgang, documentatie van nieuwe functies die waarschijnlijk in C ++ 17 worden opgenomen.

  • Overzicht van de nieuwe C ++ (C ++ 11/14) (alleen PDF) (Scott Meyers) (bijgewerkt voor C ++ 1y / C ++ 14) Dit zijn de presentatiematerialen (dia's en enkele dictaten) van een driedaagse training aangeboden door Scott Meyers, een zeer gerespecteerde auteur op C ++. Hoewel de lijst met items kort is, is de kwaliteit hoog.

  • De C ++ Core Guidelines (C ++ 11/14/17 / ...) (onder redactie van Bjarne Stroustrup en Herb Sutter) is een evoluerend online document dat bestaat uit een reeks richtlijnen voor het gebruik van moderne C ++. De richtlijnen zijn gericht op relatief hogere problemen, zoals interfaces, resourcebeheer, geheugenbeheer en concurrency die van invloed zijn op de toepassingsarchitectuur en het bibliotheekontwerp. Het project was aangekondigd op CppCon'15 door Bjarne Stroustrup en anderen en verwelkomt bijdragen van de gemeenschap. De meeste richtlijnen worden aangevuld met een beweegreden en voorbeelden en discussies over mogelijke hulpmiddelondersteuning. Veel regels zijn specifiek ontworpen om automatisch te worden gecontroleerd door statische analysehulpmiddelen.

  • De C ++ Super-veelgestelde vragen (Marshall Cline, Bjarne Stroustrup en anderen) is een inspanning van de Standard C ++ Foundation om de C ++ FAQ's te verenigen die eerder individueel werden onderhouden door Marshall Cline en Bjarne Stroustrup en die ook nieuwe bijdragen bevatten. De items pakken meestal problemen op een gemiddeld niveau aan en worden vaak met een humoristische toon geschreven. Niet alle items zijn mogelijk helemaal 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 van de standaardbibliotheek C ++ heeft. De documentatie is zeer precies, 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 staat het filteren toe van de weergave voor een specifieke versie. Het project was gepresenteerd door Nate Kohl op CppCon'14.


Klassiekers / Ouder

Notitie: Sommige informatie in deze boeken is mogelijk niet up-to-date of wordt niet langer als de beste werkwijze beschouwd.

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

  • Ruminaties op C ++ - (Andrew Koenig en Barbara Moo) [Beoordeling]

  • Geavanceerde C ++ programmeerstijlen en idioom (James Coplien) Een voorloper van de patroonbeweging, het beschrijft veel C ++ - specifieke 'idiomen'. Het is zeker een heel goed boek en het is misschien nog steeds de moeite waard om gelezen te worden als je de tijd kunt verspillen, 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, een goede lezen, als het alleen maar up-to-date was. Het is lang voor C ++ 98 geschreven en mist veel functies (bijvoorbeeld 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 korrel zout mee moet nemen. Het eerste deel van een nieuwe editie is verwacht in 2018.

  • In het C ++ -objectmodel (Stanley Lippman) Als je wilt weten hoe virtuele lidfuncties vaak worden geïmplementeerd en hoe basisobjecten gewoonlijk in het geheugen worden geplaatst in een scenario met meerdere overnamen, en hoe dit alles de prestaties beïnvloedt, zul je hier gedegen discussies over vinden onderwerpen.

  • De geannoteerde C ++ -handleiding (Bjarne Stroustrup, Margaret A. Ellis) Dit boek is behoorlijk achterhaald omdat het de C ++ 2.0-versie van 1989 verkent - sjablonen, uitzonderingen, naamruimten en nieuwe casts waren nog niet geïntroduceerd. Zeggen dat dit boek echter door de hele C ++ standaard van die tijd gaat, met uitleg over de beweegredenen, de mogelijke implementaties en kenmerken van de taal. Dit is geen boek om programmeerprincipes en patronen te leren op C ++, maar om elk aspect van de C ++ -taal te begrijpen.

  • Denken in C ++ (Bruce Eckel) Twee delen; is een tutorialstijl gratis set boeken op intro-niveau. downloads: deel 1, deel 2. Helaas zijn ze ontsierd door een aantal triviale fouten (bijvoorbeeld het bijhouden van tijdelijke bestanden gebeurt automatisch const), zonder officiële errata-lijst. Een gedeeltelijke 3rd Errata-lijst met partijen is beschikbaar op (http://www.computersciencelab.com/Eckel.htm), maar het is blijkbaar niet onderhouden.

  • Scientific and Engineering C ++: een inleiding tot geavanceerde technieken en voorbeelden (John Barton en Lee Nackman) Het is een uitgebreid en zeer gedetailleerd boek dat heeft geprobeerd om alle functies die beschikbaar zijn in C ++ uit te leggen en te gebruiken, in de context van numerieke methoden. Het introduceerde in die tijd verschillende nieuwe technieken, zoals het Curiously Recurring Template Pattern (CRTP, ook wel Barton-Nackman-trick genoemd). Het pionierde verschillende technieken zoals dimensionale analyse en automatische differentiatie. Het kwam met veel compileerbare en nuttige code, variërend van een expression-parser 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 enigszins verouderd in de stijl en C ++ -functies, maar het was toen een ongelooflijke tour-de-force (1994, pre-STL). De hoofdstukken over overerving van dynamica 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.


4015