Остаточне керівництво та перелік книг C ++


4243

Це питання намагається зібрати кілька перлин серед десятків поганих книг C ++, які виходять щороку.

На відміну від багатьох інших мов програмування, які часто вибираються з підручників, знайдених в Інтернеті, мало хто може швидко підібрати C ++, не вивчаючи добре написаної книги C ++. Це занадто великий і складний для цього. Насправді вона настільки велика і складна, що там дуже багато дуже поганих книг C ++ . І ми говоримо не про поганий стиль, а про такі речі, як спорт, очевидно очевидні фактичні помилки та пропагування безглуздо стилів програмування .

Будь ласка, відредагуйте прийняту відповідь, щоб забезпечити якісні книги та приблизний рівень кваліфікації - бажано після обговорення вашого додатку в кімнаті чату C ++ . (Регулярні особи можуть нещадно скасувати вашу роботу, якщо вони не погоджуються з рекомендацією.) Додайте короткий розмит / опис кожної книги, з якої ви особисто читали / отримували користь. Сміливо обговорюйте якість, заголовки тощо. Книги, які відповідають критеріям, будуть додані до списку. Книги, що мають огляди Асоціації користувачів C та C ++ (ACCU), мають посилання на рецензію.

* Примітка. Поширені запитання та інші ресурси можна знайти в інформації про теги C ++ та нижче.

Відповіді:


4888

Новачок

Вступний, попереднього досвіду програмування немає

  • C ++ Primer * (Стенлі Ліппман, Хосе Лайой та Барбара Е. Му) ( оновлено для C ++ 11 ) Отриманий на 1 к сторінках, це дуже ретельне введення в C ++, яке охоплює майже все на мові у дуже доступному форматі і дуже докладно. П’яте видання (вийшло 16 серпня 2012 року) охоплює C ++ 11. [Рецензія]

  • Програмування: Принципи та практика використання C ++ (Bjarne Stroustrup, 2-е видання - 25 травня 2014 р.) ( Оновлено для C ++ 11 / C ++ 14 ) Вступ до програмування, що використовує C ++ творцем мови. Гарне прочитання, яке не передбачає попереднього досвіду програмування, але не тільки для новачків.

* Не слід плутати C ++ Primer Plus (Stephen Prata) зі значно менш сприятливим оглядом .

Вступний, з попереднім досвідом програмування

  • Екскурсія по C ++ (Bjarne Stroustrup) ( 2-е видання для C ++ 17 ) "Тур" - це швидкий огляд (близько 180 сторінок та 14 розділів) підручник з огляду всіх стандартних C ++ (мови та стандартної бібліотеки та використання C ++ 11 ) на помірно високому рівні для людей, які вже знають C ++ або принаймні досвідчені програмісти. Ця книга є розширеною версією матеріалу, який складає глави 2-5 мови програмування C ++, 4-е видання.

  • Прискорений C ++ (Ендрю Коніг та Барбара Му, 1-е видання - 24 серпня 2000 р.) Це, в основному, охоплює те саме, що і ґрунтовник C ++ , але це робить на чверті його простору. Це багато в чому тому, що це не спроба бути вступом до програмування , а вступом до C ++ для людей, які раніше програмували на іншій мові. Він має більш круту криву навчання, але, для тих, хто може впоратися з цим, це дуже компактне вступ до мови. (Історично це склало нове підґрунтя, будучи першою книгою для початківців, яка застосувала сучасний підхід до викладання мови.) Незважаючи на це, C ++, який він викладає, суто C ++ 98. [Рецензія]

Кращі практики

  • Ефективний C ++ (Скотт Майєрс, 3-е видання - 22 травня 2005 р.) Це було написано з метою стати найкращою другою книгою, яку повинні прочитати програмісти C ++, і це вдалося. Раніші видання були націлені на програмістів, що надходять із С, третє видання змінює це і націлює програмістів, що надходять з таких мов, як Java. У ньому представлено ~ 50 легко запам’ятовуваних правил, а також їх обгрунтування у дуже доступному (і приємному) стилі. Для C ++ 11 та C ++ 14 приклади та декілька питань застаріли, і слід віддавати перевагу ефективним сучасним C ++. [Рецензія]

  • Ефективний сучасний C ++ (Скотт Майєрс) Це, в основному, нова версія Ефективного С ++ , спрямована на програмістів C ++, які здійснюють перехід від C ++ 03 до C ++ 11 та C ++ 14.

  • Ефективна STL (Скотт Майєрс). Це спрямовано на те, щоб зробити те ж саме із частиною стандартної бібліотеки, що надходить із STL, щоробило Ефективний C ++ для мови загалом: У ньому представлені основні правила, а також їх обґрунтування. [Рецензія]

Проміжний

  • Ефективніший C ++ (Скотт Майєрс) Навіть більше правил, ніж Ефективний C ++ . Не так важливо, як у першій книзі, але все-таки добре знати.

  • Винятковий C ++ (Herb Sutter) Представлений як набір головоломок, це одне з найкращих та ретельних обговорень правильного управління ресурсами та безпекою винятків у C ++ за рахунок придбання ресурсів - це ініціалізація (RAII) на додаток до глибокого висвітлення різноманітності. інших тем, включаючи ідіому pimpl, пошук імен, хороший дизайн класу та модель пам'яті C ++. [Рецензія]

  • Більш винятковий C ++ (Herb Sutter) Окрімобговорення ефективного об'єктно-орієнтованого програмування в C ++ та правильного використання STL,охоплює додаткові теми безпеки винятків, не охоплені винятковим C ++ . [Рецензія]

  • Винятковий стиль C ++ (Herb Sutter) Обговорює загальне програмування, оптимізацію та управління ресурсами; у цій книзі також є чудове опис того, як писати модульний код на C ++ за допомогою функцій, які не є членами, та принципу єдиної відповідальності. [Рецензія]

  • Стандарти кодування C ++ (Герб Саттер та Андрій Олександреску) "Стандарти кодування" тут не означають "скільки пробілів я повинен відступати від коду?" Ця книга містить 101 найкращі практики, ідіоми та загальні підводні камені, які можуть допомогти вам написати правильний, зрозумілий та ефективний код C ++. [Рецензія]

  • C ++ Templates: The Complete Guide (David Vandevoorde і Nicolai M. Josuttis) Цекнига про шаблонияк вони існували до C ++ 11. Він охоплює все, від самих основ до найсучаснішого метапрограмування шаблонів і пояснює кожну деталь того, як працюють шаблони (як концептуально, так і те, як вони реалізовані), а також обговорює багато загальних підводних каменів. Має відмінні підсумки Правила одного визначення (ODR) та роздільну здатність перевантаження в додатках. Друге видання охоплює C ++ 11, C ++ 14 і C ++ 17 вже опубліковано. [Рецензія]

  • C ++ 17 - Повне керівництво (Nicolai M. Josuttis) У цій книзі описано всі нові функції, внесені до стандарту C ++ 17, що охоплюють все, від простих, таких як "Inline Variables", "constexpr if" аж до "Polymorphic Ресурси пам'яті "та" Нове та видалене за допомогою даних із перекриттям ".


Розширений

  • Сучасний дизайн C ++ (Андрій Олександреску) Новаторська книга про передові технології загального програмування. Представляє дизайн на основі політики, списки типів та основні загальні ідіоми програмування, потім пояснюється, скільки корисних моделей дизайну (включаючи невеликі алокатори об'єктів, функтори, фабрики, відвідувачі та багатометодичні методи) можуть бути реалізовані ефективно, модульно та чисто з використанням загального програмування . [Рецензія]

  • Метапрограмування шаблонів C ++ (Девід Абрахамс та Олексій Гуртовой)

  • C ++ Concurrency In Action (Ентоні Вільямс) Книга, що охоплює підтримку паралельних технологій C ++ 11, включаючи бібліотеку потоків, бібліотеку атомів, модель пам'яті C ++, замки та мютекси, а також питання проектування та налагодження багатопотокових програм. Друге видання охоплює C ++ 14 і C ++ 17 вже опубліковано.

  • Розширене метапрограмування на C ++ (Davide Di Gennaro) Посібник з технічних методів TMP перед C ++ 11, орієнтований більше на практику, ніж на теорію. У цій книзі є багато фрагментів, деякі з яких зроблені застарілими за типовими ознаками, але методи, проте, корисні знати. Якщо ви можете миритися з вигадливим форматуванням / редагуванням, його легше читати, ніж Олександреску, і, певно, більш корисно. Для більш досвідчених розробників є хороший шанс, що ви можете підібрати щось про темний куточок C ++ (химерність), яке зазвичай виникає лише через великий досвід.

  • Функціональне програмування на C ++ (Іван Чукич) Книга знайомить читача з функціональною парадигмою в сучасній C ++. Він охоплює теоретичні та кодові аспекти з різноманітними прикладами та діаграмами. Автор має досвід викладання та використовує його, щоб плавно провести читача через різні аспекти функціонального програмування.


Референтний стиль - всі рівні

C ++ 11/14/17 / ... Посилання:

  • C ++ 11 / 14 / 17 Стандарт (INCITS / ISO / IEC 14882: 2011/2014/2017) Це, звичайно, є остаточним арбітром всього того, що є або не є С ++. Однак майте на увазі, що він призначений виключно як орієнтир для досвідчених користувачів, які бажають приділити багато часу та зусиль на його розуміння. Стандарт C ++ 17 випускається в електронному вигляді за 198 швейцарських франків.

  • Стандарт C ++ 17 доступний, але, здається, не в економічній формі - безпосередньо з ISO він коштує 198 швейцарських франків (близько 200 доларів США). Для більшості людей остаточний проект до стандартизації є більш ніж адекватним (і безкоштовним). Багато хто віддасть перевагу ще більш новій чернетці , документуючи нові функції, які, ймовірно, будуть включені до C ++ 20.

  • Огляд нового C ++ (C ++ 11/14) (лише PDF) (Скотт Майєрс) ( оновлено для C ++ 14 ) Це презентаційні матеріали (слайди та деякі конспекти лекцій) триденного навчального курсу, запропонованого Скотт Майєрс, який є дуже шанованим автором на C ++. Незважаючи на те, що список предметів короткий, якість висока.

  • В Основні принципи C ++ (C ++ 11 / 14/17 / ...) ( під редакцією Бьярне Страуструп і Herb Sutter) є розвивається онлайн документ , що складається з набору керівних принципів з використанням сучасних C ++ добре. Настанови зосереджені на відносно вищих рівнях, таких як інтерфейси, управління ресурсами, управління пам'яттю та паралельність, що впливають на архітектуру додатків та дизайн бібліотеки. Проект був оголошений на CppCon'15 Bjarne Stroustrup та іншими та вітає внесок громади. Більшість вказівок доповнені обґрунтуванням та прикладами, а також обговореннями можливої ​​підтримки інструментів. Багато правил розроблені спеціально для автоматичного перевірки за допомогою інструментів статичного аналізу.

  • C ++ Super-FAQ (Marshall Cline, Бьярне Страуструп і інші) є спробою Стандартної Foundation C ++ уніфікувати C ++ часто задаються раніше підтримували індивідуально Marshall Cline і Бьярне Страуструп , а також включення нових внесків. Елементи в основному стосуються питань на проміжному рівні та часто написані з жартівливим тоном. Не всі елементи можуть бути повністю оновлені з останньою версією стандарту C ++ ще.

  • cppreference.com (C ++ 03/11/14/17 / ...) (ініційований Нейт Колем) - це вікі, який узагальнює основні характеристики основної мови та має велику документацію стандартної бібліотеки C ++. Документація дуже точна, але її легше читати, ніж офіційний стандартний документ, і забезпечує кращу навігацію завдяки своїй природі вікі. Проект документує всі версії стандарту C ++, а сайт дозволяє фільтрувати дисплей для певної версії. Проект був представлений Нейт Колем на CppCon'14 .


Класика / Старша

Примітка. Деяка інформація, що міститься в цих книгах, може не бути оновленою або більше не вважається найкращою практикою.

  • Дизайн та еволюція C ++ (Bjarne Stroustrup) Якщо ви хочете дізнатись, чому мова є такою, якою вона є, ця книга саме там, де ви знайдете відповіді. Це охоплює все до стандартизації C ++.

  • Романи на C ++ - (Ендрю Кеніг та Барбара Му) [Рецензія]

  • Розширені стилі та ідіоми програмування на C ++ (Джеймс Копліен) Попередник руху шаблону, він описує багато специфічних для ідентифікацій C ++ «ідіом». Це, звичайно, дуже хороша книга, і, можливо, все-таки варто прочитати, якщо ви можете витратити час, але досить старий і не в курсі сучасних C ++.

  • Великий масштаб програмного забезпечення C ++ (Джон Лакос) Лакос пояснює методи управління дуже великими проектами програм C ++. Звичайно, добре читати, якби це було лише в актуальному стані. Він був написаний задовго до C ++ 98 і пропускає багато функцій (наприклад, простори імен), важливих для масштабних проектів. Якщо вам потрібно працювати у великому проекті програмного забезпечення C ++, ви можете прочитати його, хоча вам потрібно взяти більше, ніж зерно солі. Перший том нового видання виходить у 2019 році .

  • Всередині об'єктної моделі C ++ (Стенлі Ліппман) Якщо ви хочете знати, як зазвичай реалізуються функції віртуальних членів і як базові об'єкти зазвичай викладаються в пам'ять за сценарієм багатонаспадкування, і як все це впливає на продуктивність, саме тут ви будете знайти ґрунтовне обговорення таких тем.

  • Довідковий посібник з анотованими C ++ (Bjarne Stroustrup, Margaret A. Ellis) Ця книга досить застаріла тим, що вона вивчає версію C ++ 2.0 1989 року. Шаблони, винятки, простори імен та нові касти ще не були представлені. Говорячи, що, однак, ця книга проходить весь стандарт часу C ++, пояснюючи обґрунтування, можливі реалізації та особливості мови. Це не книга для вивчення принципів та моделей програмування на C ++, але для розуміння кожного аспекту мови C ++.

  • Мислення в С ++ (Брюс Еккель, 2-е видання, 2000). Два томи; це безкоштовний набірпідручників із стилюпідручника. Завантаження: т. 1 , т. 2 . На жаль, їх затьмарила низка тривіальних помилок (наприклад, підтвердження того, що тимчасові журнали автоматичноconst), без офіційного списку помилок. Частковийсписок третьої партії учасників доступний за посиланням ( http://www.computersciencelab.com/Eckel.htm ), але він, очевидно, не підтримується.

  • Науково-технічний C ++: Вступ до передових методик та прикладів (Джон Бартон та Лі Накман) Це всеосяжна та дуже детальна книга, яка намагалася пояснити та використати всі функції, доступні в C ++, у контексті числових методів. У той час було впроваджено кілька нових методик, таких як Цікаво повторюваний шаблон шаблону (CRTP, який також називають трюком Бартона-Накмана). Він запровадив декілька методів, таких як розмірний аналіз та автоматична диференціація. Він постачався з великою кількістю компільованого та корисного коду, починаючи від аналізатора виразів до обгортки Lapack. Код все ще доступний тут: http://www.informit.com/store/scientist-and-engineering-c-plus-plus-an-introduction-9780201533934. На жаль, книги стали трохи застарілими за стилем та особливостями C ++, однак це було неймовірною екскурсією на той час (1994, перед STL). Глави про успадкування динаміки є трохи складними для розуміння та не дуже корисними. Оновлена ​​версія цієї класичної книги, яка включає семантику руху та уроки, отримані в STL, буде дуже приємною.


402
@ Г. Расовський: Усі книги, які обіцяють навчати X за Y години. Наприклад, вивчіть C ++ за 24 години. Я вважаю, що всіх таких книг краще уникати.
akhil_mittal

115
Мені не хочеться наступати на будь-яке взуття, але я не рекомендую "Думати в C ++" Брюса Еккеля, хоча я поважаю автора за те, що він безкоштовно публікував свої матеріали в Інтернеті. Перспектива книги говорить про порівняно слабке або неефективне використання C ++ та "об'єктно-орієнтованого" програмування, схоже на погане застосування шаблонів проектування GoF. Я вважав це цікавою вступною книгою до програмування взагалі, але, оскільки хтось стає більш знайомим з програмуванням та (особливо) інформатикою в цілому, я вважаю книги, які вважають чисто "класичними" термінами ООП шкоди для освіти.

30
@ G.Rassovsky на сайті accu.org є розділ оглядів книг з рейтингами. Ви можете шукати C ++. Багато з них мають оцінку "не рекомендується".
Zaphod Beeblebrox

83
Прискорений C ++ - з 2000 року. Чи варто хвилюватися, що він застарів?
AutonomousApps

60
Я думаю, було б добре розмістити дати, видані для видання (з номером видання, де це можливо).
Аарон Холл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.