Domanda 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, quello ci sono molti pessimi libri C ++  là fuori. E non stiamo parlando di cattivo stile, ma cose come lo sport errori fattuali evidentemente evidenti  e promuovere stili di programmazione abissalmente pessimi .

Si prega di modificare la risposta accettata per fornire libri di qualità  e un livello di abilità approssimativo - preferibilmente   dopo   discutendo la tua aggiunta in la 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 sono disponibili nel Informazioni sui tag C ++  e sotto .


4253


origine


risposte:


Principiante

Introduttivo, nessuna precedente esperienza di programmazione

  • Primer C ++  * (Stanley Lippman, Josée Lajoie e Barbara E. Moo) ( aggiornato per C ++ 11 ) Venendo alle pagine di 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, 2nd Edition - 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 un'esperienza di programmazione precedente, ma non è solo per i principianti.

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

Introduttivo, con esperienza di programmazione precedente

  • Un giro di C ++  (Bjarne Stroustrup) ( 2a 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 usando C ++ 11 ) ad 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 di The C ++ Programming Language, 4a edizione.

  • C ++ accelerato  (Andrew Koenig e Barbara Moo, prima edizione - 24 agosto 2000) Questo copre fondamentalmente lo stesso terreno del Primer C ++ , ma lo fa su un quarto del suo spazio. Questo è in gran parte perché non tenta di essere un'introduzione a programmazione , ma un'introduzione a C ++  per 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 usare un approccio moderno per insegnare la lingua.) Nonostante ciò, il C ++ insegna è puramente C ++ 98. [Revisione]

Migliori pratiche

  • Efficace C ++  (Scott Meyers, 3rd Edition - 22 maggio 2005) Questo è stato scritto con l'intento di essere il miglior libro secondo cui 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]

  • C ++ moderno efficace  (Scott Meyers) Questa è fondamentalmente la nuova versione di Efficace C ++ , rivolto ai programmatori C ++ che fanno la transizione da C ++ 03 a C ++ 11 e C ++ 14.

  • STL efficace  (Scott Meyers) Questo mira a fare lo stesso con la parte della libreria standard proveniente dalla STL cosa Efficace C ++  ha fatto per la lingua nel suo complesso: presenta le regole del pollice insieme alla loro logica. [Revisione]

Intermedio

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

  • C ++ eccezionale  (Herb Sutter) Presentato come un insieme 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 buona classe e il modello di memoria C ++. [Revisione]

  • C ++ più eccezionale  (Herb Sutter) Tratta argomenti di sicurezza delle eccezioni non trattati in C ++ eccezionale , 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]

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

  • Modelli C ++: la guida completa  (David Vandevoorde e Nicolai M. Josuttis) Questo è il  prenota 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. UN seconda edizione  che copre C ++ 11, C ++ 14 e C ++ 17 è già stato pubblicato. [Revisione]


Avanzate

  • Design moderno in C ++  (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]

  • Modello C ++ Metaprogrammazione  (David Abrahams e Aleksey Gurtovoy)

  • Concorrenza C ++ in azione  (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

C ++ 11/14 Riferimenti:

  • Lo standard C ++ (INCITS / ISO / IEC 14882-2011)  Questo, ovviamente, è l'arbitro finale di tutto ciò che è o non è C ++. Essere consapevoli, tuttavia, che è inteso puramente come riferimento per esperto  utenti disposti a dedicare tempo e sforzi considerevoli alla sua comprensione. Come al solito, la prima versione è stata abbastanza  costoso ($ 300 + US), ma ora è stato rilasciato in forma elettronica per $ 60US.

  • Lo standard C ++ 14 è disponibile, ma apparentemente non in una forma economica - direttamente dall'iso  costa 198 franchi svizzeri (circa $ 200 Stati Uniti). Per la maggior parte delle persone, il bozza finale prima della standardizzazione  è più che adeguato (e gratuito). Molti preferiranno un ancora più nuova bozza , documentando 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 corso di formazione di tre giorni offerto da Scott Meyers, che è un autore molto rispettato su C ++. Anche se la lista degli articoli è breve, la qualità è alta.

  • Il Linee guida per il C ++ (C ++ 11/14/17 / ...)  (a cura di Bjarne Stroustrup e Herb Sutter) è un documento online in continua evoluzione costituito da 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 era 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 possibile supporto degli strumenti. Molte regole sono progettate specificamente per essere automaticamente verificabili tramite strumenti di analisi statica.

  • Il C ++ Super-FAQ  (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 funzionalità di base del linguaggio di base 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 era 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 saperlo perché  la lingua è così com'è, questo libro è dove trovi le risposte. Questo copre tutto prima della standardizzazione  di C ++.

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

  • Stili e idiomi avanzati di programmazione in C ++  (James Coplien) Un predecessore del movimento del pattern, 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 software su larga scala in C ++  (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 namespace) 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 è atteso nel 2018 .

  • 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 di base sono comunemente disposti in memoria in uno scenario di multi-ereditarietà, e come tutto questo influisce sulle prestazioni, è qui che troverai discussioni approfondite di tali temi.

  • Il manuale di riferimento C ++ annotato  (Bjarne Stroustrup, Margaret A. Ellis) Questo libro è abbastanza obsoleto nel fatto che esplora la versione del 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) Due volumi; è uno stile tutorial gratuito  set di libri di livello introduttivo. download: vol 1 , vol 2 . Sfortunatamente sono segnati da una serie di errori banali (ad esempio mantenendo che i provvisori siano automaticamente const), senza elenco errata ufficiale. Un parziale 3 rd  elenco di errata di partito è disponibile su http://www.computersciencelab.com/Eckel.htm ), ma apparentemente non è stato mantenuto.

  • C ++ scientifico e ingegneristico: introduzione a tecniche ed 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à dinamica 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.


4015