Pytanie The Definitive C ++ Book Guide and List


To pytanie próbuje zebrać kilka pereł wśród dziesiątek złych książek w C ++, które są publikowane co roku.

W przeciwieństwie do wielu innych języków programowania, które często są zbierane w drodze z tutoriali znalezionych w Internecie, niewiele osób może szybko pobrać C ++ bez studiowania dobrze napisanej książki w języku C ++. Jest to o wiele za duże i skomplikowane. W rzeczywistości jest tak duży i złożony, że jest bardzo wiele bardzo złych książek w C ++ tam na zewnątrz. I nie mówimy tu o złym stylu, ale o sportach jaskrawo oczywiste błędy rzeczowe i promowanie nieprzyzwoicie złych stylów programowania.

Edytuj zaakceptowaną odpowiedź, aby to zapewnić książki o wysokiej jakości i przybliżony poziom umiejętności - raczej  po  omawiając swój dodatek w czat w C ++. (Stali bywalcy mogą bezlitośnie cofnąć twoją pracę, jeśli nie zgadzają się z zaleceniem.) Dodaj krótką notkę / opis każdej książki, którą osobiście przeczytałeś / z której skorzystałeś. Zapraszam do debaty na temat jakości, nagłówków itp. Książki, które spełniają kryteria zostaną dodane do listy. Książki z recenzjami stowarzyszenia użytkowników C i C ++ (ACCU) zawierają linki do recenzji.

* Uwaga: często zadawane pytania i inne zasoby można znaleźć w Informacje o tagach C ++ i pod .


4253


pochodzenie




Odpowiedzi:


Początkujący

Wprowadzający, bez wcześniejszego doświadczenia w programowaniu

  • C ++ Primer * (Stanley Lippman, Josée Lajoie i Barbara E. Moo) (zaktualizowany dla C ++ 11Wychodząc na stronę 1k, jest to bardzo szczegółowe 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 2 - 25 maja 2014 r.) (zaktualizowany dla C ++ 11 / C ++ 14) Wprowadzenie do programowania za pomocą C ++ przez twórcę języka. Dobra lektura, która nie zakłada żadnego wcześniejszego doświadczenia w programowaniu, ale nie jest tylko dla początkujących.

* Nie mylić z C ++ Primer Plus (Stephen Prata), ze znacznie mniej korzystnym przejrzeć.

Wprowadzający, z wcześniejszym doświadczeniem programistycznym

  • Wycieczka po C ++ (Bjarne Stroustrup) (Druga edycja dla C ++ 17) "Wycieczka" to szybki (około 180 stron i 14 rozdziałów) samouczek ogólny przegląd wszystkich standardowych C ++ (biblioteka językowa i standardowa, i przy użyciu 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 Języka programowania C ++, wydanie 4.

  • Przyspieszone C ++ (Andrew Koenig i Barbara Moo, 1 edycja - 24 sierpnia 2000 r.) Zasadniczo obejmuje to samo grunty co C ++ Primer, ale robi to na czwartej części swojej przestrzeni. Jest tak w dużej mierze dlatego, że nie próbuje być wprowadzeniem do programowanie, ale wprowadzenie do C ++ dla osób, które wcześniej programowały w innym języku. Ma bardziej stromą krzywą uczenia się, ale dla tych, którzy sobie z tym poradzą, jest to bardzo zwięzłe wprowadzenie do tego języka. (Historycznie rzecz biorąc, odkrył on nową podstawę, będąc pierwszą książką dla początkujących, która używa nowoczesnego podejścia do nauczania języka.) Mimo to, C ++ naucza czysto C ++ 98. [Przejrzeć]

Najlepsze praktyki

  • Efektywny C ++ (Scott Meyers, 3rd Edition - 22 maja 2005) Został napisany w celu bycia najlepszą drugą książką, którą programiści C ++ powinni przeczytać, i to się udało. Wcześniejsze wydania były skierowane do programistów pochodzących z C, trzecia edycja zmienia to i dotyczy programistów pochodzących z języków takich jak Java. Przedstawia ~ 50 łatwych do zapamiętania zasad kciuka 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ć]

  • Efektywny nowoczesny C ++ (Scott Meyers) Jest to w zasadzie nowa wersja Efektywny C ++, przeznaczone dla programistów C ++ dokonujących przejścia z C ++ 03 na C ++ 11 i C ++ 14.

  • Efektywny STL (Scott Meyers) Ma to na celu uczynienie tego samego z częścią standardowej biblioteki pochodzącej ze STL, co Efektywny C ++ do języka jako całości: Przedstawia reguły kciuka wraz z ich uzasadnieniem. [Przejrzeć]

Pośredni

  • Bardziej efektywne C ++ (Scott Meyers) Jeszcze więcej zasad kciuka niż Efektywny C ++. Nie tak ważne jak te z pierwszej książki, ale nadal dobrze wiedzieć.

  • Wyjątkowe C ++ (Herb Sutter) Prezentowany jako zestaw łamigłówek, ma jedną z najlepszych i dokładniejszych dyskusji na temat właściwego zarządzania zasobami i bezpieczeństwa wyjątków w C ++ poprzez pozyskiwanie zasobów jest inicjalizacją (RAII), jak również dogłębnego pokrycia wielu innych tematy obejmujące idiom pimpl, wyszukiwanie nazw, dobry projekt klasy i model pamięci C ++. [Przejrzeć]

  • Bardziej wyjątkowe C ++ (Herb Sutter) Obejmuje dodatkowe tematy związane z bezpieczeństwem wyjątków, których nie obejmuje Wyjątkowe 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; ta książka ma również doskonałą ekspozycję dotyczącą pisania kodu modułowego w C ++ za pomocą funkcji nie będących członkami i zasady jednej odpowiedzialności. [Przejrzeć]

  • Standardy kodowania C ++ (Herb Sutter and Andrei Alexandrescu) "Standardy kodowania" nie oznaczają tutaj "ile spacji powinienem wgrać mój kod?" Ta książka zawiera 101 najlepszych praktyk, idiomów i typowych pułapek, które mogą pomóc ci napisać poprawne, zrozumiałe i wydajny kod C ++. [Przejrzeć]

  • Szablony w C ++: Kompletny przewodnik (David Vandevoorde i Nicolai M. Josuttis) To jest  książkę o szablonach, które istniały przed C ++ 11. Obejmuje on wszystko, od bardzo podstawowych 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 implementacji) i omawia wiele typowych pułapek. Ma doskonałe streszczenia zasady "jednej definicji" (ODR) i rozdzielczości przeładowania w załącznikach. ZA Druga edycja obejmujące C ++ 11, C ++ 14 i C ++ 17 zostało już opublikowane. [Przejrzeć]


zaawansowane

  • Nowoczesny design w C ++ (Andrei Alexandrescu) Przełomowa książka o zaawansowanych technikach programowania ogólnego. Wprowadza projektowanie oparte na regułach, listy typów i podstawowe idiomy programowania ogólnego, a następnie wyjaśnia, w jaki sposób użyteczne wzorce projektowe (w tym małe obiekty, funktory, fabryki, odwiedzający i metody multi) mogą być wdrażane wydajnie, modułowo i czysto przy użyciu programowania ogólnego. . [Przejrzeć]

  • Szablon C ++ Metaprogramming (David Abrahams i Aleksey Gurtovoy)

  • Współzależność C ++ w działaniu (Anthony Williams) Książka opisują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 zagadnienia projektowania i debugowania aplikacji wielowątkowych.

  • Zaawansowane C ++ Metaprogramming (Davide Di Gennaro) Podręcznik do TMP z przed C ++ 11, skupiony bardziej na praktyce niż na teorii. W tej książce jest mnóstwo opisów, z których niektóre są przestarzałe według cech typu, ale techniki, które warto poznać. Jeśli potrafisz znosić dziwaczne formatowanie / edycję, łatwiej jest odczytać niż Alexandrescu i prawdopodobnie bardziej satysfakcjonujące. Bardziej doświadczonym programistom jest duża szansa, że ​​uda Ci się zdobyć coś na temat ciemnego kąta C ++ (dziwactwa), który zwykle pojawia się tylko dzięki bogatemu doświadczeniu.


Styl odniesienia - wszystkie poziomy

  • Język programowania C ++ (Bjarne Stroustrup) (zaktualizowany dla C ++ 11) Klasyczne wprowadzenie do C ++ przez jego twórcę. Napisany równolegle do klasycznego K & R, to rzeczywiście bardzo przypomina ten tekst i obejmuje praktycznie wszystko od podstawowego języka do standardowej biblioteki, do programowania paradygmatów do filozofii języka. [Przejrzeć] Uwaga: Wszystkie wydania standardu C ++ są śledzone w tym pytaniu: Gdzie znajdę aktualny standard C ++.

  • Samouczek i referencje do biblioteki standardowej C ++ (Nicolai Josuttis) (zaktualizowany dla C ++ 11) The wprowadzenie i odniesienie do Biblioteki Standardowej C ++. Drugie wydanie (wydane 9 kwietnia 2012 r.) Obejmuje C ++ 11. [Przejrzeć]

  • Strumienie I lokacje C ++ IO (Angelika Langer i Klaus Kreft) Niewiele można powiedzieć o tej książce, z tym wyjątkiem, że jeśli chcesz dowiedzieć się czegoś o strumieniach i lokalizacjach, to jest to jedyne miejsce, gdzie można znaleźć ostateczne odpowiedzi. [Przejrzeć]

C ++ 11/14 Referencje:

  • Standard C ++ (INCITS / ISO / IEC 14882-2011) Jest to oczywiście ostateczny arbiter wszystkiego, co jest lub nie jest C ++. Należy jednak pamiętać, że jest to wyłącznie wzmianka doświadczony użytkownicy gotowi poświęcić sporo czasu i wysiłku na jego zrozumienie. Jak zwykle pierwsze wydanie było całkiem drogie (300 USD + USA), ale zostało wydane w formie elektronicznej za 60 USD.

  • Standard C ++ 14 jest dostępny, ale pozornie nie w ekonomicznej formie - bezpośrednio z ISO kosztuje 198 franków szwajcarskich (około 200 USD). Dla większości ludzi końcowy projekt przed normalizacją jest więcej niż wystarczające (i bezpłatne). Wielu woli nawet nowszy projekt, dokumentowanie nowych funkcji, które prawdopodobnie zostaną włączone do C ++ 17.

  • Omówienie nowego C ++ (C ++ 11/14) (tylko w formacie PDF) (Scott Meyers) (zaktualizowane dla C ++ 1y / C ++ 14) Są to materiały do ​​prezentacji (slajdy i niektóre notatki z wykładów) z trzydniowego szkolenia oferowanego przez Scotta Meyersa, który jest bardzo szanowanym autorem w C ++. Mimo że lista pozycji jest krótka, jakość jest wysoka.

  • The Wytyczne C ++ Core (C ++ 11/14/17 / ...) (pod redakcją Bjarne Stroustrup i Herb Sutter) jest rozwijającym się dokumentem internetowym składającym się z zestawu wytycznych dotyczących korzystania z nowoczesnej studni C ++. Wytyczne koncentrują się na względach na wyższym poziomie, takich jak interfejsy, zarządzanie zasobami, zarządzanie pamięcią i współbieżność wpływające na architekturę aplikacji i projektowanie bibliotek. Projekt był ogłoszone na CppCon'15 przez Bjarne Stroustrup i innych i z zadowoleniem przyjmuje wkład społeczności. Większość wytycznych jest uzupełniona o uzasadnienie i przykłady, a także dyskusje na temat możliwego wsparcia narzędzi. Wiele reguł zostało zaprojektowanych specjalnie do automatycznego sprawdzania za pomocą narzędzi do analizy statycznej.

  • The Super-FAQ C ++ (Marshall Cline, Bjarne Stroustrup i inni) to wysiłek Fundacji Standard C ++ w celu ujednolicenia często zadawanych pytań C ++, które wcześniej były utrzymywane indywidualnie przez Marshalla Cline i Bjarne Stroustrup, a także wprowadzanie nowych treści. Przedmioty w większości dotyczą problemów na poziomie średnio zaawansowanym i często są napisane z humorem. Nie wszystkie produkty mogą być w pełni aktualne z najnowszą wersją standardu C ++.

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


Classics / Older

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

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

  • Ruminacje w C ++ - (Andrew Koenig i Barbara Moo) [Przejrzeć]

  • Zaawansowane style programowania i idiomy C ++ (James Coplien) Poprzednik ruchu wzorów, opisuje wiele specyficznych dla C ++ "idiomów". Jest to z pewnością bardzo dobra książka i może być warta przeczytania, jeśli możesz zaoszczędzić czas, ale całkiem stara i nieaktualna z obecnym C ++.

  • Projekt C ++ o dużej skali (John Lakos) Lakos wyjaśnia techniki zarządzania bardzo dużymi projektami oprogramowania w C ++. Z pewnością dobra lektura, jeśli tylko była aktualna. Został napisany na długo przed C ++ 98 i pomija wiele funkcji (np. Przestrzeni nazw) ważnych dla dużych projektów. Jeśli potrzebujesz pracować w dużym oprogramowaniu w języku C ++, możesz chcieć go przeczytać, chociaż musisz wziąć z niego więcej niż odrobinę soli. Pierwszy tom nowego wydania jest spodziewany w 2018 r.

  • Wewnątrz modelu obiektowego C ++ (Stanley Lippman) Jeśli chcesz wiedzieć, w jaki sposób funkcje wirtualnego członka są powszechnie stosowane i jak często obiekty podstawowe są rozmieszczane w pamięci w scenariuszu dziedziczenia wielu dziedzin i jak to wszystko wpływa na wydajność, to tutaj znajdziesz szczegółowe dyskusje tematy.

  • Annotated C ++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) Ta książka jest dość przestarzała w tym, że eksploruje wersję C ++ 2.0 z 1989 r. - Szablony, wyjątki, przestrzenie nazw i nowe rzuty nie zostały jeszcze wprowadzone. Mówiąc jednak, że ta książka przechodzi przez cały standard C ++ czasu wyjaśniając racjonalne uzasadnienie, możliwe implementacje i cechy języka. Nie jest to 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) Dwa tomy; jest stylem samouczka wolny zestaw intro książek poziomu. Pliki do pobrania: vol 1, vol 2. Niestety są one nękane przez kilka banalnych błędów (np. Utrzymywanie, że tymczasowe są automatycznie const), bez oficjalnej listy erraty. Częściowe 3r & D lista errata strony jest dostępna pod adresem (http://www.computersciencelab.com/Eckel.htm), ale najwyraźniej nie jest utrzymany.

  • Naukowe i inżynierskie 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. Wprowadzono wówczas kilka nowych technik, takich jak Curiously Recurring Template Pattern (CRTP, zwany również trikiem Bartona-Nackmana). Był pionierem w kilku technikach, takich jak analiza wymiarowa i automatyczne różnicowanie. Przyszedł z wieloma przydatnymi i użytecznymi kodami, od parsera wyrażeń do owinięć Lapack. 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 w tamtych czasach było to niewiarygodne tour-de-force (1994, pre-STL). Rozdziały poświęcone dziedziczeniu dynamiki są nieco skomplikowane do zrozumienia i niezbyt użyteczne. Zaktualizowana wersja tej klasycznej książki, która zawiera semantykę ruchu i lekcje wyniesione ze STL byłoby bardzo miłe.


4019



Czy istnieje lista, prawdopodobnie, książek c ++, których NIE POWINIEN czytać? - G.Rassovsky
@G Rassovsky: Wszystkie książki, które obiecują uczyć X w ciągu Y godzin. Na przykład Naucz się C ++ w 24 godziny. Uważam, że lepiej unikać takich książek. - i_am_zero
Nienawidzę wkładać niczyich butów, ale nie polecam "Myślenia w C ++" Bruce'a Eckela, chociaż szanuję autora za publikowanie jego materiałów online za darmo. Perspektywa książki sugeruje względnie słabe lub nieefektywne użycie programowania C ++ i "obiektowego", podobnie jak słabe zastosowanie wzorców projektowych GoF. Zauważyłem, że jest to interesująca książka wprowadzająca do programowania w ogóle, ale jak ktoś staje się bardziej zaznajomiony z programowaniem i (szczególnie) informatyką jako całości, znajduję książki, które myślą wyłącznie w "klasycznych" terminach OOP szkodzących edukacji. - Alexander Pritchard
Przyspieszone C ++ jest od 2000 roku. Czy powinienem się martwić, że jest nieaktualny? - AutonomousApps
Myślę, że dobrze byłoby umieścić daty publikacji dla wydania (w stosownych przypadkach z numerem wydania). - Aaron Hall♦