La guida al libro e l’elenco definitivi di C ++

Questa domanda tenta di collezionare le poche perle tra le dozzine di cattivi libri C ++ che vengono pubblicati ogni anno.

A differenza di molti altri linguaggi di programmazione, che vengono spesso acquisiti durante i tutorial trovati su Internet, pochi sono in grado di acquisire rapidamente C ++ senza studiare un libro C ++ ben scritto. È troppo grande e complesso per farlo. In effetti, è così grande e complesso che ci sono molti pessimi libri C ++ là fuori. E non stiamo parlando di cattivo stile, ma di cose come sfortunatamente evidenti errori fattuali e promozione di stili di programmazione abissalmente pessimi .

Modifica la risposta accettata per fornire libri di qualità e un livello di abilità approssimativo, preferibilmente dopo aver discusso della tua aggiunta nella chat room di C ++ . (I clienti abituali possono annullare senza pietà il tuo lavoro se non sono d’accordo con una raccomandazione.) Aggiungi una breve descrizione / descrizione su ogni libro che hai letto / beneficiato personalmente. Sentiti libero di discutere di qualità, titoli, ecc. I libri che soddisfano i criteri saranno aggiunti alla lista. I libri con recensioni dell’Associazione di utenti C e C ++ (ACCU) hanno collegamenti alla recensione.

* Nota: le domande frequenti e altre risorse possono essere trovate nelle informazioni sui tag C ++ e in c ++ – faq .

Principiante

Introduttivo, nessuna precedente esperienza di programmazione

  • C ++ Primer * (Stanley Lippman, Josée Lajoie e Barbara E. Moo) ( aggiornato per C ++ 11 ) Disponibile in pagine da 1k, questa è un’introduzione molto approfondita in C ++ che copre praticamente tutto nella lingua in un formato molto accessibile e in grande dettaglio. La quinta edizione (pubblicata il 16 agosto 2012) copre C ++ 11. [Revisione]

  • Programmazione: principi e pratica Uso di C ++ (Bjarne Stroustrup, 2a edizione – 25 maggio 2014) ( aggiornato per C ++ 11 / C ++ 14 ) Introduzione alla programmazione mediante C ++ da parte del creatore del linguaggio. Una buona lettura, che non presuppone un’esperienza di programmazione precedente, ma non è solo per i principianti.

* Da non confondere con C ++ Primer Plus (Stephen Prata), con una revisione significativamente meno favorevole.

Introduttivo, con esperienza di programmazione precedente

  • A Tour of C ++ (Bjarne Stroustrup) ( 2 ° edizione per C ++ 17 ) Il “tour” è una panoramica rapida (circa 180 pagine e 14 capitoli) di tutto lo standard C ++ (linguaggio e libreria standard e utilizzo di C ++ 11 ) ad un livello moderatamente alto per le persone che già conoscono C ++ o almeno sono programmatori esperti. Questo libro è una versione estesa del materiale che costituisce i capitoli 2-5 di The C ++ Programming Language, 4a edizione.

  • Accelerated C ++ (Andrew Koenig e Barbara Moo, 1st Edition – August 24, 2000) Questo copre fondamentalmente la stessa base del C ++ Primer , ma lo fa su un quarto del suo spazio. Questo è in gran parte perché non tenta di essere un’introduzione alla programmazione , ma un’introduzione a C ++ per le persone che hanno precedentemente programmato in un’altra lingua. Ha una curva di apprendimento più ripida, ma, per coloro che riescono a farcela, è una introduzione molto compatta al linguaggio. (Storicamente, ha aperto nuove strade essendo il primo libro per principianti ad utilizzare un approccio moderno per insegnare la lingua.) Nonostante ciò, il C ++ che insegna è puramente C ++ 98. [Revisione]

Migliori pratiche

  • Effective C ++ (Scott Meyers, 3rd Edition – 22 maggio 2005) Questo è stato scritto con l’intento di essere il miglior libro di lettura che i programmatori C ++ dovrebbero leggere, e ci è riuscito. Le edizioni precedenti erano rivolte a programmatori provenienti da C, la terza edizione lo cambia e si rivolge a programmatori che provengono da linguaggi come Java. Presenta circa 50 regole pratiche facili da ricordare e le loro motivazioni in uno stile molto accessibile (e divertente). Per C ++ 11 e C ++ 14 gli esempi e alcuni problemi sono obsoleti e si dovrebbe preferire l’efficace C ++ moderno. [Revisione]

  • Effective Modern C ++ (Scott Meyers) Questa è fondamentalmente la nuova versione di Effective C ++ , rivolta ai programmatori C ++ che fanno il passaggio da C ++ 03 a C ++ 11 e C ++ 14.

  • Efficace STL (Scott Meyers) Questo objective è quello di fare lo stesso con la parte della libreria standard proveniente dalla STL che Effective C ++ ha fatto per la lingua nel suo complesso: Presenta regole empiriche insieme alla loro logica. [Revisione]

Intermedio

  • Più efficace C ++ (Scott Meyers) Ancora più regole empiriche rispetto all’efficace C ++ . Non così importanti come quelli del primo libro, ma comunque buoni da sapere.

  • Eccezionale C ++ (Herb Sutter) Presentato come una serie di puzzle, questo ha una delle discussioni migliori e approfondite sulla corretta gestione delle risorse e sulla sicurezza delle eccezioni in C ++ attraverso l’acquisizione delle risorse è Initialization (RAII) oltre alla copertura approfondita di una varietà di altri argomenti tra cui l’idioma pimpl, la ricerca del nome, il design di una buona class e il modello di memoria C ++. [Revisione]

  • Eccezionale C ++ (Herb Sutter) Copre ulteriori argomenti di sicurezza delle eccezioni non trattati in Eccezionale C ++ , oltre alla discussione sull’efficace programmazione orientata agli oggetti in C ++ e sull’uso corretto dell’STL. [Revisione]

  • Eccezionale stile C ++ (Herb Sutter) Discute di programmazione generica, ottimizzazione e gestione delle risorse; questo libro ha anche un’ottima esposizione su come scrivere codice modulare in C ++ usando funzioni non associate e il principio della singola responsabilità. [Revisione]

  • Gli standard di codifica C ++ (Herb Sutter e Andrei Alexandrescu) “Coding standards” qui non significano “quanti spazi devo indentare il mio codice?” Questo libro contiene 101 best practice, idiomi e insidie ​​comuni che possono aiutarti a scrivere correttamente, codice C ++ comprensibile ed efficiente. [Revisione]

  • Modelli C ++: la guida completa (David Vandevoorde e Nicolai M. Josuttis) Questo è il libro sui template come esistevano prima del C ++ 11. Copre ogni aspetto, dalle nozioni di base a alcuni dei più avanzati metaprogrammazione dei modelli e spiega ogni dettaglio su come i modelli funzionano (sia concettualmente che sul modo in cui vengono implementati) e discute molte insidie ​​comuni. Ha eccellenti riassunti della regola One Definition (ODR) e la risoluzione di sovraccarico nelle appendici. Una seconda edizione che copre C ++ 11, C ++ 14 e C ++ 17 è già stata pubblicata. [Revisione]


Avanzate

  • Modern C ++ Design (Andrei Alexandrescu) Un libro rivoluzionario sulle tecniche avanzate di programmazione generica. Introduce progettazione basata su policy, elenchi di tipi e idiomi di programmazione generici fondamentali quindi spiega quanti schemi di progettazione utili (inclusi piccoli oggetti allocatori, funtori, fabbriche, visitatori e multi-metodi) possono essere implementati in modo efficiente, modulare e pulito utilizzando la programmazione generica . [Revisione]

  • C ++ Template Metaprogramming (David Abrahams and Aleksey Gurtovoy)

  • Concurrency in Action C ++ (Anthony Williams) Un libro che copre il supporto della concorrenza C ++ 11 che include la libreria di thread, la libreria atomica, il modello di memoria C ++, i blocchi e i mutex, nonché i problemi di progettazione e debug di applicazioni multithread.

  • Metaprogrammazione C ++ avanzata (Davide Di Gennaro) Un manuale pre-C ++ 11 di tecniche TMP, focalizzato più sulla pratica che sulla teoria. Ci sono un sacco di frammenti in questo libro, alcuni dei quali sono resi obsoleti dai tratti del tipo, ma le tecniche, tuttavia, sono utili da conoscere. Se riesci a sopportare la stravagante formattazione / modifica, è più facile da leggere di Alexandrescu e, probabilmente, più gratificante. Per gli sviluppatori più esperti, ci sono buone probabilità che tu possa imparare qualcosa su un angolo oscuro del C ++ (una stranezza) che di solito avviene solo attraverso una vasta esperienza.


Stile di riferimento – Tutti i livelli

  • Il linguaggio di programmazione C ++ (Bjarne Stroustrup) ( aggiornato per C ++ 11 ) La classica introduzione a C ++ dal suo creatore. Scritto in parallelo con il classico K & R, questo in effetti legge molto e copre praticamente tutto, dal linguaggio di base alla libreria standard, ai paradigmi di programmazione alla filosofia del linguaggio. [Recensione] Nota: tutte le versioni dello standard C ++ sono tracciate in questa domanda: Dove trovo lo standard C ++ corrente .

  • Tutorial e riferimenti alla libreria standard C ++ (Nicolai Josuttis) ( aggiornato per C ++ 11 ) Introduzione e riferimento per la libreria standard C ++. La seconda edizione (pubblicata il 9 aprile 2012) copre C ++ 11. [Revisione]

  • I C ++ IO Stream e Locali (Angelika Langer e Klaus Kreft) C’è poco da dire su questo libro eccetto che, se vuoi sapere qualcosa su stream e locales, allora questo è l’unico posto dove trovare risposte definitive. [Revisione]

C ++ 11/14 Riferimenti:

  • Lo standard C ++ (INCITS / ISO / IEC 14882-2011) Questo, ovviamente, è l’arbitro finale di tutto ciò che è o non è C ++. Siate consapevoli, tuttavia, che è inteso puramente come riferimento per utenti esperti disposti a dedicare tempo e sforzi considerevoli alla sua comprensione. Come al solito, la prima versione è stata piuttosto costosa ($ 300 + US), ma ora è stata rilasciata in formato elettronico per $ 60US.

  • Lo standard C ++ 14 è disponibile, ma apparentemente non in una forma economica: direttamente dall’ISO costa 198 franchi svizzeri (circa 200 dollari USA). Per la maggior parte delle persone, la bozza finale prima della standardizzazione è più che adeguata (e gratuita). Molti preferiranno una bozza ancora più recente , che documenta nuove funzionalità che potrebbero essere incluse in C ++ 17.

  • Panoramica del nuovo C ++ (C ++ 11/14) (solo PDF) (Scott Meyers) ( aggiornato per C ++ 1y / C ++ 14 ) Questi sono i materiali di presentazione (diapositive e alcune note di lezione) di un tre- corso di formazione diurno offerto da Scott Meyers, che è un autore molto rispettato su C ++. Anche se la lista degli articoli è breve, la qualità è alta.

  • Il C ++ Core Guidelines (C ++ 11/14/17 / …) (a cura di Bjarne Stroustrup e Herb Sutter) è un documento online in continua evoluzione che consiste in una serie di linee guida per l’utilizzo del moderno C ++. Le linee guida sono focalizzate su problemi di livello relativamente più elevato, come interfacce, gestione delle risorse, gestione della memoria e concorrenza che influiscono sull’architettura dell’applicazione e sulla progettazione della libreria. Il progetto è stato annunciato a CppCon’15 da Bjarne Stroustrup e altri e accoglie con favore i contributi della comunità. La maggior parte delle linee guida sono integrate da un razionale e da esempi e da discussioni sul ansible supporto degli strumenti. Molte regole sono progettate specificamente per essere automaticamente verificabili tramite strumenti di analisi statica.

  • La Super-FAQ di C ++ (Marshall Cline, Bjarne Stroustrup e altri) è uno sforzo della Standard C ++ Foundation per unificare le FAQ C ++ precedentemente mantenute individualmente da Marshall Cline e Bjarne Stroustrup e incorporando anche nuovi contributi. Gli articoli riguardano principalmente problemi a livello intermedio e sono spesso scritti con un tono umoristico. Non tutti gli articoli potrebbero essere completamente aggiornati con l’ultima versione dello standard C ++.

  • cppreference.com (C ++ 03/11/14/17 / …) (avviato da Nate Kohl) è una wiki che riassume le caratteristiche di base del linguaggio core e ha una vasta documentazione della libreria standard C ++. La documentazione è molto precisa ma è più facile da leggere rispetto al documento standard ufficiale e offre una navigazione migliore grazie alla sua natura wiki. Il progetto documenta tutte le versioni dello standard C ++ e il sito consente di filtrare il display per una versione specifica. Il progetto è stato presentato da Nate Kohl a CppCon’14 .


Classici / Anziani

Nota: alcune informazioni contenute in questi libri potrebbero non essere aggiornate o non essere considerate best practice.

  • Il design e l’evoluzione del C ++ (Bjarne Stroustrup) Se vuoi sapere perché la lingua è così com’è, questo libro è dove trovi le risposte. Questo copre tutto prima della standardizzazione del C ++.

  • Ruminations on C ++ – (Andrew Koenig e Barbara Moo) [Recensione]

  • Programmazione avanzata degli stili e degli idiomi in C ++ (James Coplien) Un predecessore del movimento del modello, descrive molti “idiomi” specifici del C ++. È sicuramente un libro molto buono e potrebbe valere la pena leggerlo se si può risparmiare tempo, ma piuttosto vecchio e non aggiornato con l’attuale C ++.

  • Progettazione di software C ++ su grande scala (John Lakos) Lakos spiega le tecniche per gestire progetti software C ++ molto grandi. Certamente, una buona lettura, se solo fosse aggiornata. È stato scritto molto prima del C ++ 98 e manca su molte funzionalità (ad esempio spazi dei nomi) importanti per progetti su larga scala. Se hai bisogno di lavorare in un grande progetto di software C ++, potresti volerlo leggere, anche se è necessario prendere più di un pizzico di sale con esso. Il primo volume di una nuova edizione è previsto per il 2018 .

  • All’interno del modello a oggetti C ++ (Stanley Lippman) Se si desidera sapere come vengono comunemente implementate le funzioni dei membri virtuali e come gli oggetti di base vengono comunemente disposti in memoria in uno scenario di multi-ereditarietà, e in che modo tutto ciò influisce sulle prestazioni, è qui che si trovare discussioni approfondite su tali argomenti.

  • Manuale di riferimento Annotated C ++ (Bjarne Stroustrup, Margaret A. Ellis) Questo libro è abbastanza obsoleto nel fatto che esplora la versione C ++ 2.0 del 1989: modelli, eccezioni, spazi dei nomi e nuovi cast non erano ancora stati introdotti. Dicendo che comunque, questo libro passa attraverso l’intero standard C ++ del tempo spiegando la logica, le possibili implementazioni e le caratteristiche del linguaggio. Questo non è un libro per imparare i principi e i modelli di programmazione su C ++, ma per comprendere ogni aspetto del linguaggio C ++.

  • Pensando in C ++ (Bruce Eckel, 2nd Edition, 2000). Due volumi; è un set gratuito di tutorial in stile di livello intro. Download: vol 1 , vol 2 . Sfortunatamente sono segnati da una serie di errori banali (ad esempio mantenendo che i provvisori siano automaticamente const ), senza una lista di errata ufficiale. Un elenco di errata di terze parti parziale è disponibile su ( http://www.computersciencelab.com/Eckel.htm ), ma apparentemente non viene mantenuto.

  • C ++ scientifico e ingegneristico: Introduzione alle tecniche e agli esempi avanzati (John Barton e Lee Nackman) È un libro completo e molto dettagliato che ha cercato di spiegare e utilizzare tutte le funzionalità disponibili in C ++, nel contesto dei metodi numerici. Introdusse all’epoca diverse nuove tecniche, come ad esempio il modello di modello Curiosamente ricorrente (CRTP, chiamato anche trucco Barton-Nackman). È stato pioniere di diverse tecniche come l’analisi dimensionale e la differenziazione automatica. È arrivato con un sacco di codice compilabile e utile, che va da un parser di espressioni a un wrapper di Lapack. Il codice è ancora disponibile qui: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934 . Sfortunatamente, i libri sono diventati un po ‘obsoleti nello stile e nelle caratteristiche del C ++, tuttavia è stato un incredibile tour-de-force al momento (1994, pre-STL). I capitoli sull’ereditarietà dynamic sono un po ‘complicati da comprendere e non molto utili. Una versione aggiornata di questo libro classico che include la semantica del movimento e le lezioni apprese dalla STL sarebbe molto bella.