Przewodnik i lista definitywnych C ++

4243

To pytanie próbuje zebrać kilka pereł spośród kilkudziesięciu złych książek C ++, które są publikowane każdego roku.

W przeciwieństwie do wielu innych języków programowania, które często są wybierane w drodze z samouczków znalezionych w Internecie, niewielu jest w stanie szybko wybrać C ++ bez przestudiowania dobrze napisanej książki C ++. Jest to zbyt duże i skomplikowane, aby to zrobić. W rzeczywistości jest tak duży i złożony, że istnieje bardzo wiele bardzo złych książek o C ++ . I nie mówimy o złym stylu, ale o takich rzeczach, jak sportowo rażąco oczywiste błędy faktyczne i promowanie fatalnie złych stylów programowania .

Edytuj zaakceptowaną odpowiedź, aby zapewnić wysokiej jakości książki i przybliżony poziom umiejętności - najlepiej po omówieniu dodania w czacie C ++ . (Stali bywalcy mogą bezlitośnie cofnąć twoją pracę, jeśli nie zgadzają się z zaleceniem.) Dodaj krótki napis / opis na temat każdej książki, którą osobiście przeczytałeś / korzystałeś. Nie krępuj się omawiać jakości, nagłówków itp. Książki spełniające kryteria zostaną dodane do listy. Książki, które mają recenzje Stowarzyszenia Użytkowników C i C ++ (ACCU), mają linki do recenzji.

* Uwaga: często zadawane pytania i inne zasoby można znaleźć w informacjach o znacznikach C ++ i poniżej.

sbi
źródło

Odpowiedzi:

4887

Początkujący

Wprowadzenie, brak wcześniejszego doświadczenia w programowaniu

  • C ++ Primer * (Stanley Lippman, Josée Lajoie i Barbara E. Moo) ( zaktualizowany do C ++ 11 ) Jest to bardzo obszerne wprowadzenie do C ++, które obejmuje prawie wszystko w języku w bardzo przystępnym formacie i bardzo szczegółowo. Piąta edycja (wydana 16 sierpnia 2012 r.) Obejmuje C ++ 11. [Przejrzeć]

  • Programowanie: zasady i praktyka przy użyciu C ++ (Bjarne Stroustrup, wydanie drugie - 25 maja 2014 r.) ( Zaktualizowane do C ++ 11 / C ++ 14 ) Wprowadzenie do programowania przy użyciu C ++ przez twórcę języka. Dobra lektura, która nie zakłada wcześniejszego doświadczenia w programowaniu, ale jest nie tylko dla początkujących.

* Nie należy mylić z C ++ Primer Plus (Stephen Prata), ze znacznie mniej przychylną recenzją .

Wstępne, z wcześniejszym doświadczeniem w programowaniu

  • Przewodnik po C ++ (Bjarne Stroustrup) ( 2. wydanie dla C ++ 17 ) „Przewodnik” to szybki (około 180 stron i 14 rozdziałów) przegląd samouczka wszystkich standardowych C ++ (język i standardowa biblioteka oraz korzystanie z C ++ 11 ) na umiarkowanie wysokim poziomie dla osób, które już znają C ++ lub przynajmniej są doświadczonymi programistami. Ta książka jest rozszerzoną wersją materiału, który stanowi rozdziały 2-5 The C ++ Programming Language, wydanie 4.

  • Przyspieszone C ++ (Andrew Koenig i Barbara Moo, 1. wydanie - 24 sierpnia 2000 r.) To zasadniczo obejmuje ten sam grunt co C ++ Primer , ale robi to na czwartym miejscu. Wynika to głównie z tego, że nie próbuje być wstępem do programowania , ale wstępem do C ++ dla osób, które wcześniej programowały w innym języku. Ma bardziej krzywą uczenia się, ale dla tych, którzy mogą sobie z tym poradzić, jest to bardzo zwięzłe wprowadzenie do języka. (Historycznie przełamał on nowy wymiar, będąc pierwszą książką dla początkujących, która stosuje nowoczesne podejście do nauczania języka.) Mimo to nauczany przez niego język C ++ ma czysto C ++ 98. [Przejrzeć]

Najlepsze praktyki

  • Skuteczne C ++ (Scott Meyers, wydanie trzecie - 22 maja 2005 r.) Zostało napisane w celu bycia najlepszą drugą książką, którą programiści C ++ powinni przeczytać i udało się. Wcześniejsze wersje były skierowane do programistów pochodzących z języka C, trzecia edycja to zmienia i jest przeznaczona dla programistów pochodzących z języków takich jak Java. Przedstawia ~ 50 łatwych do zapamiętania zasad wraz z ich uzasadnieniem w bardzo przystępnym (i przyjemnym) stylu. W przypadku C ++ 11 i C ++ 14 przykłady i kilka problemów są przestarzałe i należy preferować efektywne nowoczesne C ++. [Przejrzeć]

  • Effective Modern C ++ (Scott Meyers) Jest to zasadniczo nowa wersja Effective C ++ , skierowana do programistów C ++ przechodzących z C ++ 03 na C ++ 11 i C ++ 14.

  • Effective STL (Scott Meyers) Ma to zrobić to samo z częścią standardowej biblioteki pochodzącej z STL, co Effective C ++ zrobił z całym językiem: Przedstawia ogólne zasady wraz z ich uzasadnieniem. [Przejrzeć]

Pośredni

  • Bardziej efektywne C ++ (Scott Meyers) Jeszcze więcej praktycznych reguł niż Effective C ++ . Nie tak ważne jak te w pierwszej książce, ale nadal dobrze wiedzieć.

  • Wyjątkowy C ++ (Herb Sutter) Przedstawiony jako zestaw zagadek, zawiera jedną z najlepszych i dogłębnych dyskusji na temat właściwego zarządzania zasobami i bezpieczeństwa wyjątków w C ++ poprzez Resource Acquisition is Initialization (RAII), a także dogłębne omówienie różnych innych tematów, w tym idiomu pimpl, wyszukiwania nazw, dobrego projektowania klas i modelu pamięci C ++. [Przejrzeć]

  • Bardziej wyjątkowe C ++ (Herb Sutter) Obejmuje dodatkowe tematy związane z bezpieczeństwem wyjątków nieuwzględnione w Wyjątkowym C ++ , oprócz dyskusji o efektywnym programowaniu obiektowym w C ++ i poprawnym użyciu STL. [Przejrzeć]

  • Wyjątkowy styl C ++ (Herb Sutter) Omawia ogólne programowanie, optymalizację i zarządzanie zasobami; w tej książce znajduje się także doskonała prezentacja sposobu pisania kodu modułowego w C ++ przy użyciu funkcji nie będących członkami i zasady pojedynczej odpowiedzialności. [Przejrzeć]

  • Standardy kodowania C ++ (Herb Sutter i Andrei Alexandrescu) „Standardy kodowania” nie oznaczają tutaj „ile spacji powinienem wciąć mój kod?” Ta książka zawiera 101 najlepszych praktyk, idiomów i typowe pułapki, które mogą pomóc Ci napisać poprawny, zrozumiały i wydajny kod C ++. [Przejrzeć]

  • C ++ Szablony: The Complete Guide (David Vandevoorde i Nicolai M. Josuttis) Jestksiążka o szablonach, ponieważ istniała przed c ++ 11. Obejmuje wszystko, od podstaw po najbardziej zaawansowane metaprogramowanie szablonów i wyjaśnia każdy szczegół działania szablonów (zarówno pod względem koncepcyjnym, jak i sposobu ich implementacji) oraz omawia wiele typowych pułapek. Ma doskonałe podsumowania Reguły One Definition (ODR) i rozdzielczości przeciążenia w dodatkach. Druga edycja obejmująca c ++ 11, C ++ 14 i C ++ 17 został już opublikowany. [Przejrzeć]

  • C ++ 17 - Kompletny przewodnik (Nicolai M. Josuttis) Ta książka opisuje wszystkie nowe funkcje wprowadzone w standardzie C ++ 17, obejmujące wszystko od prostych, takich jak „zmienne śródliniowe”, „constexpr if” aż do „polimorficznego” Zasoby pamięci ”i„ Nowe i usuń z nadmiernie wyrównanymi danymi ”.


zaawansowane

  • Nowoczesny projekt C ++ (Andrei Alexandrescu) Przełomowa książka na temat zaawansowanych technik programowania generycznego. Przedstawia projektowanie oparte na zasadach, listy typów i podstawowe idiomy programowania ogólnego, a następnie wyjaśnia, ile użytecznych wzorców projektowych (w tym małych alokatorów obiektów, funktorów, fabryk, odwiedzających i wielu metod) można zaimplementować wydajnie, modułowo i czysto przy użyciu programowania ogólnego . [Przejrzeć]

  • Metaprogramowanie szablonów C ++ (David Abrahams i Aleksey Gurtovoy)

  • C ++ Concurrency In Action (Anthony Williams) Książka obejmująca obsługę współbieżności C ++ 11, w tym bibliotekę wątków, bibliotekę atomów, model pamięci C ++, blokady i muteksy, a także problemy z projektowaniem i debugowaniem aplikacji wielowątkowych. Druga edycja obejmująca C ++ 14 i C ++ 17 został już opublikowany.

  • Zaawansowane metaprogramowanie w C ++ (Davide Di Gennaro) Podręcznik technik TMP sprzed C ++ 11, skoncentrowany bardziej na praktyce niż na teorii. W tej książce jest mnóstwo fragmentów, z których niektóre są przestarzałe ze względu na cechy typu, ale techniki są jednak przydatne. Jeśli potrafisz pogodzić się z dziwacznym formatowaniem / edycją, jest łatwiejszy do odczytania niż Alexandrescu i prawdopodobnie bardziej satysfakcjonujący. Dla bardziej doświadczonych programistów istnieje duża szansa, że ​​możesz znaleźć coś o ciemnym kącie C ++ (dziwactwo), które zwykle wynika tylko z dużego doświadczenia.

  • Programowanie funkcjonalne w C ++ (Ivan Čukić) Książka wprowadza czytelnika w funkcjonalny paradygmat współczesnego C ++. Obejmuje aspekty teoretyczne i kodowe z różnymi przykładami i schematami. Autor ma doświadczenie w nauczaniu i używa go do sprawnego poprowadzenia czytelnika przez różne aspekty programowania funkcjonalnego.


Styl odniesienia - wszystkie poziomy

  • Język programowania C ++ (Bjarne Stroustrup) ( zaktualizowany do C ++ 11 ) Klasyczne wprowadzenie do C ++ przez jego twórcę. Napisany równolegle do klasycznego K&R, w rzeczywistości czyta się bardzo podobnie i obejmuje niemal wszystko, od podstawowego języka do standardowej biblioteki, od paradygmatów programowania do filozofii języka. [Recenzja] Uwaga: Wszystkie wydania standardu C ++ są śledzone w tym pytaniu: Gdzie mogę znaleźć obecny standard C ++ .

  • C ++ Standardowa biblioteka Tutorial i Reference (Nicolai Josuttis) ( zaktualizowane dla c ++ 11 )wprowadzenie i odniesienie do C ++ Standard Library. Drugie wydanie (wydane 9 kwietnia 2012 r.) Obejmuje C ++ 11. [Przejrzeć]

  • C ++ IO Streams and Locales (Angelika Langer i Klaus Kreft) Niewiele można powiedzieć o tej książce, z wyjątkiem tego, że jeśli chcesz dowiedzieć się czegoś o strumieniach i lokalizacjach, jest to jedyne miejsce, w którym można znaleźć ostateczne odpowiedzi. [Przejrzeć]

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

  • C ++ 11 / 14 / 17 Standard (INCITS / ISO / IEC 14882: 2011/2014/2017) To, oczywiście, jest ostatnim arbiter wszystkim, który jest lub nie jest C ++. Należy jednak pamiętać, że jest on przeznaczony wyłącznie jako odniesienie dla doświadczonych użytkowników, którzy poświęcają wiele czasu i wysiłku na jego zrozumienie. Standard C ++ 17 został wydany w formie elektronicznej dla 198 franków szwajcarskich.

  • Standard C ++ 17 jest dostępny, ale najwyraźniej nie w ekonomicznej formie - bezpośrednio z ISO kosztuje 198 franków szwajcarskich (około 200 USD). Dla większości osób ostateczny projekt przed standaryzacją jest więcej niż wystarczający (i bezpłatny). Wielu woli jeszcze nowszą wersję roboczą , dokumentującą nowe funkcje, które prawdopodobnie zostaną zawarte w C ++ 20.

  • Omówienie nowego C ++ (C ++ 11/14) (tylko PDF) (Scott Meyers) ( zaktualizowany do C ++ 14 ) Są to materiały prezentacyjne (slajdy i notatki z wykładów) z trzydniowego szkolenia oferowanego przez Scott Meyers, który jest bardzo cenionym autorem w C ++. Chociaż lista przedmiotów jest krótka, jakość jest wysoka.

  • W C ++ Wytyczne główne (c ++ 11/14/17 / ...) (edytowany przez Bjarne Stroustrup i Herb Sutter) jest rozwijającym się w Internecie dokument składający się z zestawu wytycznych dla C ++ przy użyciu nowoczesnych dobrze. Wytyczne koncentrują się na względnie wyższych zagadnieniach, takich jak interfejsy, zarządzanie zasobami, zarządzanie pamięcią i współbieżność mające wpływ na architekturę aplikacji i projekt biblioteki. Projekt został ogłoszony na CppCon'15 przez Bjarne Stroustrup i innych i z zadowoleniem przyjmuje wkład społeczności. Większość wytycznych jest uzupełniana uzasadnieniem i przykładami, a także dyskusje na temat możliwego wsparcia narzędzi. Wiele reguł zaprojektowano tak, aby były automatycznie sprawdzalne przez narzędzia analizy statycznej.

  • C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup i inni) jest próbą przez standard C ++ Fundacji ujednolicenie C ++ FAQ wcześniej utrzymywane indywidualnie przez Marshalla Cline i Bjarne Stroustrup, a także wprowadzanie nowych składek. Pozycje w większości dotyczą problemów na poziomie średnio zaawansowanym i często są pisane humorystycznie. Nie wszystkie elementy mogą być w pełni aktualne w najnowszej edycji standardu C ++.

  • cppreference.com (C ++ 03/11/14/17 /…) (zainicjowany przez Nate Kohl) to wiki, która podsumowuje podstawowe funkcje języka podstawowego i ma obszerną dokumentację standardowej biblioteki C ++. Dokumentacja jest bardzo dokładna, ale łatwiejsza do odczytania niż oficjalny standardowy dokument i zapewnia lepszą nawigację ze względu na charakter wiki. Projekt dokumentuje wszystkie wersje standardu C ++, a strona umożliwia filtrowanie wyświetlania dla określonej wersji. Projekt został zaprezentowany przez Nate Kohl na CppCon'14 .


Klasyka / Starsze

Uwaga: niektóre informacje zawarte w tych książkach mogą być nieaktualne lub przestać być uważane za najlepszą praktykę.

  • Projekt i ewolucja C ++ (Bjarne Stroustrup) Jeśli chcesz wiedzieć, dlaczego język jest taki, jaki jest, w tej książce znajdziesz odpowiedzi. Obejmuje to wszystko przed standaryzacją C ++.

  • Ruminacje na temat C ++ - (Andrew Koenig i Barbara Moo) [Recenzja]

  • Zaawansowane style i idiomy programowania w C ++ (James Coplien) Poprzednik ruchu wzorców, opisuje wiele „idiomów” specyficznych dla C ++. Jest to z pewnością bardzo dobra książka i nadal warto ją przeczytać, jeśli możesz poświęcić czas, ale dość stara i nieaktualna w obecnym języku C ++.

  • Wielkoskalowe projektowanie oprogramowania C ++ (John Lakos) Lakos wyjaśnia techniki zarządzania bardzo dużymi projektami oprogramowania C ++. Z pewnością dobra lektura, jeśli tylko była aktualna. Został napisany na długo przed C ++ 98 i brakuje wielu funkcji (np. Przestrzeni nazw) ważnych dla dużych projektów. Jeśli chcesz pracować w dużym projekcie oprogramowania C ++, możesz go przeczytać, chociaż musisz wziąć ze sobą więcej niż ziarenko soli. Pierwszy tom nowej edycji zostanie wydany w 2019 roku .

  • Wewnątrz modelu obiektowego C ++ (Stanley Lippman) Jeśli chcesz wiedzieć, w jaki sposób funkcje wirtualnego elementu członkowskiego są często implementowane i jak obiekty podstawowe są zwykle układane w pamięci w scenariuszu z wieloma spadkami i jak to wszystko wpływa na wydajność, w tym miejscu będziesz znaleźć szczegółowe dyskusje na takie tematy.

  • Annotated C ++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) Ta książka jest dość przestarzała, ponieważ eksploruje wersję C ++ 2.0 z 1989 r. - Szablony, wyjątki, przestrzenie nazw i nowe obsady nie zostały jeszcze wprowadzone. Mówiąc jednak, ta książka omawia cały ówczesny standard C ++, wyjaśniając uzasadnienie, możliwe implementacje i cechy języka. To nie jest książka do nauki zasad programowania i wzorców w C ++, ale do zrozumienia każdego aspektu języka C ++.

  • Myślenie w C ++ (Bruce Eckel, 2. wydanie, 2000). Dwa tomy; to bezpłatny zestaw książek wprowadzających wstylu samouczka. Pliki do pobrania: tom 1 , tom 2 . Niestety, są nękane wieloma trywialnymi błędami (np. Utrzymywanie, że tymczasowe są automatycznieconst), bez oficjalnej listy błędów. Częściowa 3 rd lista partia errata dostępna jest ( http://www.computersciencelab.com/Eckel.htm ), ale nie jest to najwyraźniej utrzymane.

  • Naukowy i inżynierski C ++: Wprowadzenie do zaawansowanych technik i przykładów (John Barton i Lee Nackman) Jest to obszerna i bardzo szczegółowa książka, która próbowała wyjaśnić i wykorzystać wszystkie funkcje dostępne w C ++, w kontekście metod numerycznych. W tym czasie wprowadzono kilka nowych technik, takich jak Curiously Recurring Pattern Pattern (CRTP, zwany także trikiem Bartona-Nackmana). Jest pionierem kilku technik, takich jak analiza wymiarowa i automatyczne różnicowanie. Zawiera wiele kompilowalnych i użytecznych kodów, od parsera wyrażeń po opakowanie Lapacka. Kod jest nadal dostępny tutaj: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Niestety, książki stały się nieco przestarzałe w stylu i funkcjach C ++, jednak było to wówczas niesamowite tour-de-force (1994, przed STL). Rozdziały o dziedziczeniu dynamiki są nieco skomplikowane do zrozumienia i niezbyt przydatne. Zaktualizowana wersja tej klasycznej książki, która zawiera semantykę ruchów i lekcje wyciągnięte z STL, byłaby bardzo miła.

George Stocker
źródło
402
@G Rassovsky: Wszystkie książki, które obiecują uczyć X w Y godzinach. Na przykład Naucz się C ++ w ciągu 24 godzin. Uważam, że lepiej unikać takich książek.
akhil_mittal
115
Nienawidzę nadepnąć na czyjeś buty, ale nie polecam „Myślenia w C ++” Bruce'a Eckela, mimo że szanuję autora za publikowanie jego materiałów online za darmo. Perspektywa książki sugeruje stosunkowo słabe lub nieefektywne użycie C ++ i „obiektowego” programowania, podobne do złego zastosowania Wzorów Projektowych GoF. Uważam, że jest to interesująca książka wprowadzająca do programowania w ogóle, ale gdy ktoś zapozna się z programowaniem i (zwłaszcza) informatyką jako całością, znajduję książki, które myślą wyłącznie w „klasycznych” kategoriach OOP szkodliwych dla edukacji.
30
@ G.Rassovsky na stronie accu.org znajduje się sekcja recenzji książek z ocenami. Możesz wyszukać te C ++. Wiele z nich jest ocenianych jako „niezalecane”.
Zaphod Beeblebrox
83
Przyspieszone C ++ pochodzi z 2000 roku. Czy powinienem się martwić, że jest nieaktualny?
AutonomousApps
60
Myślę, że dobrze byłoby podać daty opublikowane dla wydania (w stosownych przypadkach z numerem wydania).
Aaron Hall