La guida e l'elenco dei libri C ++ definitivi


4243

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

A differenza di molti altri linguaggi di programmazione, che sono spesso raccolti in movimento dai tutorial trovati su Internet, pochi sono in grado di raccogliere rapidamente C ++ senza studiare un libro C ++ ben scritto. È troppo grande e complesso per farlo. In effetti, è così grande e complesso, che ci sono davvero molti pessimi libri in C ++ . E non stiamo parlando di cattivo stile, ma cose come sfoggiare errori di fatto palesemente evidenti e promuovere stili di programmazione terribilmente cattivi .

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 potrebbero annullare senza pietà il tuo lavoro se non sono d'accordo con una raccomandazione.) Aggiungi una breve descrizione / blurb su ogni libro di cui hai letto / beneficiato personalmente. Sentiti libero di discutere qualità, titoli, ecc. I libri che soddisfano i criteri verranno aggiunti all'elenco. I libri che hanno recensioni dell'Associazione degli utenti C e C ++ (ACCU) hanno collegamenti alla recensione.

* Nota: domande frequenti e altre risorse sono disponibili nelle informazioni sui tag C ++ e sotto.

Risposte:


4895

Principiante

Introduzione, nessuna precedente esperienza di programmazione

  • C ++ Primer * (Stanley Lippman, Josée Lajoie e Barbara E. Moo) ( aggiornato per C ++ 11 ) Arrivando a 1k pagine, questa è un'introduzione molto approfondita al C ++ che copre quasi tutto nella lingua in un formato molto accessibile e nei minimi dettagli. La quinta edizione (rilasciata il 16 agosto 2012) riguarda C ++ 11. [Revisione]

  • Programmazione: principi e pratica usando C ++ (Bjarne Stroustrup, 2a edizione - 25 maggio 2014) ( aggiornato per C ++ 11 / C ++ 14 ) Un'introduzione alla programmazione usando C ++ dal creatore del linguaggio. Una buona lettura, che non presuppone alcuna esperienza di programmazione precedente, ma non è solo per i principianti.

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

Introduzione, con esperienza di programmazione precedente

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

  • C ++ accelerato (Andrew Koenig e Barbara Moo, 1a edizione - 24 agosto 2000) Fondamentalmente copre lo stesso terreno 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 al C ++ per le persone che hanno precedentemente programmato in qualche altro linguaggio. Ha una curva di apprendimento più ripida, ma, per coloro che possono farcela, è un'introduzione molto compatta alla lingua. (Storicamente, ha aperto una nuova strada essendo il primo libro per principianti ad usare un approccio moderno all'insegnamento della lingua.) Ciononostante, il C ++ che insegna è puramente C ++ 98. [Revisione]

Migliori pratiche

  • Efficace C ++ (Scott Meyers, 3a edizione - 22 maggio 2005) È stato scritto con l'obiettivo di essere il miglior secondo programmatore C ++ del secondo libro che dovrebbe leggere e ha avuto successo. Le edizioni precedenti erano rivolte a programmatori provenienti da C, la terza edizione cambia questo e si rivolge a programmatori provenienti da lingue come Java. Presenta ~ 50 regole empiriche facili da ricordare insieme alla loro logica in uno stile molto accessibile (e divertente). Per C ++ 11 e C ++ 14 gli esempi e alcuni problemi sono obsoleti e dovrebbe essere preferito il C ++ moderno efficace. [Revisione]

  • Effective Modern C ++ (Scott Meyers) Questa è sostanzialmente la nuova versione di Effective C ++ , rivolta ai programmatori C ++ che effettuano la transizione da C ++ 03 a C ++ 11 e C ++ 14.

  • Effective STL (Scott Meyers) Questo ha lo scopo di fare lo stesso con la parte della libreria standard proveniente dallo STL che cosa ha fatto Effective C ++ per il linguaggio nel suo insieme: presenta le regole empiriche insieme alla loro logica. [Revisione]

Intermedio

  • C ++ più efficace (Scott Meyers) Ancora più regole pratiche rispetto al C ++ efficace . Non importante come quelli del primo libro, ma comunque buono a sapersi.

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

  • C ++ più eccezionale (Herb Sutter) Copre argomenti di sicurezza delle eccezioni aggiuntivi non trattati in C ++ eccezionale , oltre alla discussione di un'efficace programmazione orientata agli oggetti in C ++ e al corretto utilizzo dell'STL. [Revisione]

  • Stile C ++ eccezionale (Herb Sutter) Discute la programmazione generica, l'ottimizzazione e la gestione delle risorse; questo libro ha anche un'eccellente esposizione di come scrivere codice modulare in C ++ usando le funzioni non membri e il principio della responsabilità singola. [Revisione]

  • Standard di codifica C ++ (Herb Sutter e Andrei Alexandrescu) "Standard di codifica" qui non significa "quanti spazi devo inserire il mio codice?" Questo libro contiene 101 best practice, modi di dire e insidie ​​comuni che possono aiutarti a scrivere codice C ++ corretto, comprensibile ed efficiente. [Revisione]

  • Modelli C ++: la guida completa (David Vandevoorde e Nicolai M. Josuttis) Questo è il libro sui modelli come esistevano prima del C ++ 11. Copre tutto, dalle basi ad alcuni dei più avanzati metodi di metaprogrammazione e spiega ogni dettaglio di come funzionano i modelli (sia concettualmente che come sono implementati) e discute molte insidie ​​comuni. Ha ottimi riassunti della One Definition Rule (ODR) e risoluzione del sovraccarico nelle appendici. Una seconda edizione che copre C ++ 11, C ++ 14 e C ++ 17 è già stata pubblicata. [Revisione]

  • C ++ 17 - La guida completa (Nicolai M. Josuttis) Questo libro descrive tutte le nuove funzionalità introdotte nella norma C ++ 17 che copre tutto da quelle semplici come "Inline Variables", "constexpr if" fino a "Polymorphic Risorse di memoria "e" Nuovo ed elimina con dati non allineati ".


Avanzate

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

  • Metaprogrammazione di modelli C ++ (David Abrahams e Aleksey Gurtovoy)

  • Concorrenza in azione C ++ (Anthony Williams) Un libro che copre il supporto della concorrenza in C ++ 11 che include la libreria thread, la libreria atomics, il modello di memoria C ++, blocchi e mutex, oltre a problemi di progettazione e debug di applicazioni multithread. Una seconda edizione che copre C ++ 14 e C ++ 17 è già stata pubblicata.

  • Metaprogrammazione C ++ avanzata (Davide Di Gennaro) Un manuale pre-C ++ 11 sulle tecniche TMP, focalizzato più sulla pratica che sulla teoria. Ci sono un sacco di frammenti in questo libro, alcuni dei quali sono resi obsoleti da tratti di tipo, ma le tecniche sono comunque utili da sapere. Se riesci a sopportare la bizzarra formattazione / modifica, è più facile da leggere rispetto ad Alexandrescu e, probabilmente, più gratificante. Per gli sviluppatori più esperti, c'è una buona possibilità che tu possa prendere qualcosa su un angolo oscuro di C ++ (una stranezza) che di solito si verifica solo attraverso una vasta esperienza.

  • Programmazione funzionale in C ++ (Ivan Čukić) Il libro introduce il lettore al paradigma funzionale nel C ++ moderno. Copre gli aspetti teorici e di codice con una varietà di esempi e diagrammi. L'autore ha esperienza nell'insegnamento e lo usa per guidare senza problemi il lettore attraverso diversi aspetti della programmazione funzionale.


Stile di riferimento - Tutti i livelli

  • Il linguaggio di programmazione C ++ (Bjarne Stroustrup) ( aggiornato per C ++ 11 ) La classica introduzione al C ++ da parte del suo creatore. Scritto in parallelo al classico K&R, questo in effetti è molto simile e copre praticamente tutto, dal linguaggio principale alla libreria standard, ai paradigmi di programmazione alla filosofia del linguaggio. [Revisione] Nota: tutte le versioni dello standard C ++ sono tracciate in questa domanda: dove trovo l'attuale standard C ++ .

  • C ++ standard Biblioteca Tutorial e di riferimento (Nicolai Josuttis) ( aggiornato per C ++ 11 ) L' introduzione e di riferimento per la libreria standard C ++. La seconda edizione (rilasciata il 9 aprile 2012) riguarda C ++ 11. [Revisione]

  • The C ++ IO Streams and Locales (Angelika Langer and Klaus Kreft) C'è poco da dire su questo libro, tranne che, se vuoi sapere qualcosa su stream e locali, questo è l'unico posto dove trovare risposte definitive. [Revisione]

C ++ 11/14/17 /… Riferimenti:

  • I C ++ 11 / 14 / 17 standard (INCITS / ISO / IEC 14882: 2011/2014/2017) Questo, naturalmente, è l'arbitro finale di tutto ciò che è o non è C ++. Tenere presente, tuttavia, che è inteso esclusivamente come riferimento per utenti esperti che desiderano dedicare tempo e sforzi considerevoli alla sua comprensione. Lo standard C ++ 17 è rilasciato in formato elettronico per 198 franchi svizzeri.

  • Lo standard C ++ 17 è disponibile, ma apparentemente non in una forma economica - direttamente dall'ISO costa 198 franchi svizzeri (circa $ 200 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 ++ 20.

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

  • Le Linee guida di base C ++ (C ++ 11/14/17 /…) (a cura di Bjarne Stroustrup e Herb Sutter) sono un documento online in evoluzione costituito da una serie di linee guida per l'uso 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 delle applicazioni e sulla progettazione delle librerie. 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 una logica ed esempi, nonché da discussioni sul possibile supporto degli strumenti. Molte regole sono progettate specificamente per essere verificabili automaticamente dagli strumenti di analisi statica.

  • Le Super FAQ del C ++ (Marshall Cline, Bjarne Stroustrup e altri) sono uno sforzo della Standard C ++ Foundation per unificare le FAQ del C ++ precedentemente gestite individualmente da Marshall Cline e Bjarne Stroustrup e che includono anche nuovi contributi. Gli articoli affrontano principalmente problemi a livello intermedio e sono spesso scritti con un tono umoristico. Non tutti gli articoli potrebbero essere ancora completamente aggiornati con l'ultima edizione dello standard C ++.

  • cppreference.com (C ++ 03/11/14/17 /…) (avviato da Nate Kohl) è un wiki che riassume le funzionalità di base del linguaggio di base e ha un'ampia documentazione della libreria standard C ++. La documentazione è molto precisa ma è più facile da leggere rispetto al documento standard ufficiale e offre una migliore navigazione 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 al CppCon'14 .


Classici / Più vecchi

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

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

  • Ruminazioni su C ++ - (Andrew Koenig e Barbara Moo) [Recensione]

  • Stili di programmazione e idiomi di programmazione C ++ avanzati (James Coplien) Un predecessore del movimento del modello, descrive molti "modi di dire" specifici del C ++. È sicuramente un ottimo libro e potrebbe valere la pena leggerlo se puoi risparmiare tempo, ma piuttosto vecchio e non aggiornato con l'attuale C ++.

  • Progettazione software C ++ su larga 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 di C ++ 98 e manca di molte funzionalità (ad es. Spazi dei nomi) importanti per progetti su larga scala. Se hai bisogno di lavorare in un grande progetto software C ++, potresti volerlo leggere, anche se devi prendere più di un granello di sale con esso. Il primo volume di una nuova edizione è stato rilasciato nel 2019 .

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

  • The Annotated C ++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) Questo libro è piuttosto 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. Detto questo, tuttavia, questo libro passa attraverso l'intero standard C ++ dell'epoca, spiegando la logica, le possibili implementazioni e le caratteristiche del linguaggio. Questo non è un libro per imparare i principi e gli schemi di programmazione su C ++, ma per comprendere ogni aspetto del linguaggio C ++.

  • Pensando in C ++ (Bruce Eckel, 2nd Edition, 2000). Due volumi; è unset gratuito di libri di livello introduttivo instile tutorial. Download: vol 1 , vol 2 . Sfortunatamente sono guastati da una serie di errori insignificanti (es. Sostenere che i provvisori sono automaticamenteconst), senza una lista ufficialedi errori. Unelencoparziale di errori di terze parti è disponibile all'indirizzo ( http://www.computersciencelab.com/Eckel.htm ), ma a quanto pare non viene mantenuto.

  • C ++ scientifico e ingegneristico: un'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. Ha introdotto all'epoca diverse nuove tecniche, come il Curiously Recurring Template Pattern (CRTP, chiamato anche trucco di Barton-Nackman). Ha aperto la strada a 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 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 in qualche modo obsoleti nello stile e nelle funzionalità C ++, tuttavia era un incredibile tour-de-force all'epoca (1994, pre-STL). I capitoli sull'ereditarietà dinamica sono un po 'complicati da capire e non molto utili. Una versione aggiornata di questo libro classico che include la semantica delle mosse e le lezioni apprese dalla STL sarebbe molto bella.


402
@G Rassovsky: tutti i libri che promettono di insegnare X in Y ore. Ad esempio Impara C ++ in 24 ore. Credo che tutti questi libri siano meglio evitati.
akhil_mittal,

115
Odio calpestare le scarpe di nessuno, ma non consiglio "Thinking in C ++" di Bruce Eckel anche se rispetto l'autore per aver pubblicato i suoi materiali online gratuitamente. La prospettiva del libro suggerisce un uso relativamente scarso o inefficace del C ++ e della programmazione "orientata agli oggetti", simile alla scarsa applicazione dei GoF Design Patterns. L'ho trovato un interessante libro introduttivo alla programmazione in generale, ma man mano che qualcuno acquisisce maggiore familiarità con la programmazione e (soprattutto) l'informatica nel suo insieme, trovo libri che la considerano puramente in termini "classici" di OOP dannosi per l'educazione.

30
@ G.Rassovsky sul sito accu.org, c'è una sezione di recensioni di libri con valutazioni. Puoi cercare quelli in C ++. Molti di loro sono classificati "non consigliati".
Zaphod Beeblebrox,

83
Il C ++ accelerato è del 2000. Dovrei preoccuparmi che non sia aggiornato?
AutonomousApps

60
Penso che sarebbe bene mettere le date pubblicate per l'edizione (con il numero di edizione ove applicabile).
Aaron Hall
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.