Полное руководство и список книг C ++

4243

Этот вопрос пытается собрать несколько жемчужин среди десятков плохих книг по С ++, которые публикуются каждый год.

В отличие от многих других языков программирования, которые часто берутся на ходу из учебных пособий, найденных в Интернете, лишь немногие способны быстро освоить C ++ без изучения хорошо написанной книги по C ++. Это слишком большой и сложный для этого. На самом деле, он настолько большой и сложный, что существует очень много очень плохих книг по С ++ . И мы говорим не о плохом стиле, а о таких вещах, как очевидные фактические ошибки и пропаганда ужасно плохих стилей программирования .

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

* Примечание: часто задаваемые вопросы и другие ресурсы можно найти в информации о тегах C ++ и в разделе,

sbi
источник

Ответы:

4897

начинающий

Вводный, без опыта программирования

  • Учебник по C ++ * (Стэнли Липпман, Жозе Ладжой и Барбара Э. Му) ( обновлено для C ++ 11 ). Это 1-страничное введение, которое представляет собой очень подробное введение в C ++ и охватывает практически все в языке в очень доступном формате. и очень подробно. Пятое издание (выпущено 16 августа 2012 г.) охватывает C ++ 11. [Рассмотрение]

  • Программирование: принципы и практика использования C ++ (Бьярн Страуструп, 2-е издание - 25 мая 2014 г.) ( обновлено для C ++ 11 / C ++ 14 ) Введение в программирование с использованием C ++ создателем языка. Хорошее чтение, которое не предполагает никакого предыдущего опыта программирования, но не только для начинающих.

* Не путать с C ++ Primer Plus (Стивен Прата) со значительно менее благоприятным обзором .

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

  • Тур по C ++ (Бьярне Страуструп) ( 2-е издание для C ++ 17 ) «Тур» - это краткий обзор (около 180 страниц и 14 глав) учебного пособия по всем стандартным C ++ (язык и стандартная библиотека, и с использованием C ++). 11 ) на умеренно высоком уровне для людей, которые уже знают C ++ или хотя бы являются опытными программистами. Эта книга представляет собой расширенную версию материала, который составляет главы 2-5 языка программирования C ++, 4-е издание.

  • Ускоренный C ++ (Эндрю Кениг и Барбара Му, 1-е издание - 24 августа 2000 г.) Это в основном охватывает ту же основу, что и C ++ Primer , но делает это на четвертой части своего пространства. Во многом это связано с тем, что это не попытка быть введением в программирование , а введение в C ++ для людей, которые ранее программировали на каком-то другом языке. У него более крутая кривая обучения, но для тех, кто может с этим справиться, это очень компактное введение в язык. (Исторически она открыла новые возможности, будучи первой книгой для начинающих, в которой использовался современный подход к обучению языку.) Несмотря на это, C ++, которому она учит, - это чисто C ++ 98. [Рассмотрение]

Лучшие практики

  • Эффективный C ++ (Скотт Мейерс, 3-е издание - 22 мая 2005 г.) Это было написано с целью стать лучшей второй книгой, которую должны читать программисты на C ++, и это удалось. Предыдущие выпуски были нацелены на программистов, пришедших из C, третье издание изменило это и нацелено на программистов из таких языков, как Java. Он представляет ~ 50 легко запоминающихся эмпирических правил вместе с их обоснованием в очень доступном (и приятном) стиле. Для C ++ 11 и C ++ 14 примеры и некоторые проблемы устарели, и Effective Modern C ++ следует отдавать предпочтение. [Рассмотрение]

  • Effective Modern C ++ (Скотт Мейерс) Это в основном новая версия Effective C ++ , предназначенная для программистов на C ++, которые переходят с C ++ 03 на C ++ 11 и C ++ 14.

  • Effective STL (Скотт Мейерс) Это делается для того, чтобы сделать ту же часть стандартной библиотеки, исходящей из STL, что Effective C ++ сделал с языком в целом: он представляет практические правила вместе с их обоснованием. [Рассмотрение]

промежуточный

  • Более эффективный C ++ (Скотт Мейерс) Еще больше практических правил, чем в Effective C ++ . Не так важно, как в первой книге, но все же полезно знать.

  • Исключительный C ++ (Херб Саттер) Представленный в виде набора головоломок, он представляет собой одно из лучших и подробных обсуждений правильного управления ресурсами и безопасности исключений в C ++ посредством Resource Acquisition is Initialization (RAII) в дополнение к углубленному охвату различных других тем, включая идиому pimpl, поиск имени, хороший дизайн классов и модель памяти C ++. [Рассмотрение]

  • Подробнее Exceptional C ++ (Херб Саттер) Охватывает дополнительные темы безопасности исключений, не охваченные в Exceptional C ++ , в дополнение к обсуждению эффективного объектно-ориентированного программирования на C ++ и правильного использования STL. [Рассмотрение]

  • Исключительный стиль C ++ (Херб Саттер) Обсуждает общее программирование, оптимизацию и управление ресурсами; В этой книге также содержится превосходное изложение того, как писать модульный код на 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 - Полное руководство (Николай М. Йосуттис) В этой книге описываются все новые функции, представленные в Стандарте C ++ 17, охватывающие все, от простых, таких как «встроенные переменные», «constexpr if», до «полиморфных». Ресурсы памяти »и« Новые и удаляемые с переподписанными данными ».


продвинутый

  • Современный дизайн C ++ (Андрей Александреску) Новаторская книга о передовых общих методах программирования. Представляет дизайн на основе политик, списки типов и фундаментальные общие идиомы программирования, а затем объясняет, сколько полезных шаблонов проектирования (включая распределители небольших объектов, функторы, фабрики, посетителей и мульти-методы) могут быть реализованы эффективно, модульно и чисто с использованием универсального программирования. , [Рассмотрение]

  • Шаблон метапрограммирования на С ++ (Дэвид Абрахамс и Алексей Гуртовой)

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

  • Advanced C ++ Metaprogramming (Davide Di Gennaro) Руководство по методам TMP до C ++ 11, ориентированное больше на практику, чем на теорию. В этой книге содержится множество фрагментов, некоторые из которых устарели по типу черт, но методы, тем не менее, полезно знать. Если вы можете смириться с причудливым форматированием / редактированием, его легче читать, чем Александреску, и, возможно, это более полезно. Для более опытных разработчиков есть хороший шанс, что вы можете найти что-то о темном уголке C ++ (причуде), который обычно появляется только благодаря обширному опыту.

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


Стиль ссылки - все уровни

  • Язык программирования C ++ (Бьярне Страуструп) ( обновлен для C ++ 11 ) Классическое введение в C ++ его создателем. Написанный параллельно классическому K & R, он действительно очень похож на него и охватывает практически все: от базового языка до стандартной библиотеки, от парадигм программирования до философии языка. [Обзор] Примечание. Все выпуски стандарта C ++ отслеживаются по этому вопросу: Где найти текущий стандарт C ++ .

  • C ++ Стандартная библиотека Учебник и справочник (Nicolai Josuttis) ( обновлено для C ++ 11 )введение и ссылки для стандартной библиотеки C ++. Второе издание (выпущено 9 апреля 2012 г.) охватывает C ++ 11. [Рассмотрение]

  • C ++ IO Streams и Locales (Angelika Langer и Klaus Kreft) Об этой книге очень мало что можно сказать, за исключением того, что, если вы хотите что-то узнать о потоках и локалях, то это единственное место, где можно найти окончательные ответы. [Рассмотрение]

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 Бьярном Страуструпом и другими и приветствует вклад сообщества. Большинство руководств дополнены обоснованием и примерами, а также обсуждениями возможной поддержки инструмента. Многие правила специально разработаны для автоматической проверки средствами статического анализа.

  • C ++ Super-FAQ (Marshall Cline, Бьярне Страуструп и другие) является попыткой Стандартной Foundation C ++ унифицировать C ++ часто задаваемые вопросы ранее поддерживали индивидуально Marshall Cline и Бьярне Страуструп , а также включение новых взносов. Предметы в основном касаются вопросов на промежуточном уровне и часто написаны с юмористическим тоном. Не все элементы могут быть полностью обновлены до последней версии стандарта C ++.

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


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

Примечание. Некоторая информация, содержащаяся в этих книгах, может быть устаревшей или более не считаться оптимальной практикой.

  • Дизайн и развитие C ++ (Бьярне Страуструп) Если вы хотите знать, почему язык такой, какой он есть, эта книга - то, где вы найдете ответы. Это охватывает все до стандартизации C ++.

  • Размышления на C ++ - (Эндрю Кениг и Барбара Му) [Обзор]

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

  • Разработка крупномасштабного программного обеспечения C ++ (Джон Лакос) Лакос объясняет методы управления очень большими программными проектами C ++. Конечно, хорошее чтение, если бы оно было актуальным. Он был написан задолго до C ++ 98 и пропускает многие функции (например, пространства имен), важные для крупномасштабных проектов. Если вам нужно поработать над большим программным проектом на C ++, вы, возможно, захотите прочитать его, хотя вам нужно взять с собой больше, чем просто кусочек соли. Первый том нового издания вышел в 2019 году .

  • Внутри объектной модели C ++ (Стэнли Липпман) Если вы хотите узнать, как обычно реализуются виртуальные функции-члены и как базовые объекты обычно размещаются в памяти в сценарии с множественным наследованием, и как все это влияет на производительность, то здесь вы найдете найти подробные обсуждения таких тем.

  • Справочное руководство по аннотированному C ++ (Бьярн Страуструп, Маргарет А. Эллис) Эта книга устарела, поскольку в ней рассматривается версия C ++ 2.0 1989 года - шаблоны, исключения, пространства имен и новые преобразования еще не были представлены. Однако, говоря, что эта книга проходит через весь стандарт C ++ того времени, объясняя обоснование, возможные реализации и особенности языка. Это не книга для изучения принципов и шаблонов программирования на C ++, но для понимания каждого аспекта языка C ++.

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

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

Джордж Стокер
источник
402
@G Rassovsky: Все книги, которые обещают учить X за Y часов. Например, изучите C ++ за 24 часа. Я считаю, что всех таких книг лучше избегать.
akhil_mittal
115
Я не хочу наступать на чью-либо обувь, но я не рекомендую «Мышление в C ++» Брюса Экеля, хотя я уважаю автора за бесплатную публикацию его материалов в Интернете. Перспектива книги предполагает относительно слабое или неэффективное использование C ++ и «объектно-ориентированного» программирования, сродни плохому применению шаблонов проектирования GoF. Я нахожу это интересной вводной книгой по программированию в целом, но когда кто-то становится более знакомым с программированием и (особенно) компьютерной наукой в ​​целом, я нахожу книги, которые думают чисто в «классических» терминах ООП, вредных для образования.
30
@ G.Rassovsky на сайте accu.org, есть раздел с рецензиями на книги. Вы можете искать те из C ++. Многие из них имеют рейтинг «не рекомендуется».
Зафод Библброкс
83
Ускоренный C ++ с 2000 года. Должен ли я беспокоиться, что он устарел?
Автономные приложения
60
Я думаю, что было бы хорошо, чтобы поставить даты, опубликованные для издания (с номером издания, где это применимо).
Аарон Холл