Окончательное руководство и список книг на С++

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

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

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

* Примечание. Часто задаваемые вопросы и другие ресурсы можно найти в теге С++ и в .Суб >

Ответ 1

Начинающий

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

  • 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++ (Скотт Мейерс) Даже больше практических правил, чем Эффективный C++. Не так важно, как в первой книге, но все же полезно знать.

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

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

  • Исключительный стиль C++ (Херб Саттер) Обсуждает общее программирование, оптимизацию и управление ресурсами; в этой книге также представлено отличное изложение того, как писать модульный код в C++, используя функции, не являющиеся членами, и принцип единой ответственности. [Обзор]

  • C++ Стандарты кодирования (Херб Саттер и Андрей Александреску) "Стандарты кодирования" здесь не означают "сколько пробелов я должен сделать отступом для моего кода?" Эта книга содержит 101 передовой опыт, идиомы и распространенные ловушки, которые могут помочь вам написать правильный, понятный и эффективный код C++. [Обзор]

  • C++ Шаблоны: Полное руководство (Дэвид Вандевурде и Николай М. Йосуттис) Это книга о шаблонах в том виде, в каком они существовали до C++ 11. Он охватывает все, от самых базовых до самых передовых метапрограммирования шаблонов, и объясняет каждую деталь того, как работают шаблоны (как концептуально, так и как они реализованы), и обсуждает много распространенных ошибок. Имеет отличные сводки по правилу единого определения (ODR) и разрешению перегрузки в приложениях. второе издание, охватывающее C++ 11, C++ 14 и C++ 17, уже опубликовано. [Обзор]

  • C++ 17 - Полное руководство (Николай М. Хосуттис) В этой книге описаны все новые функции, представленные в стандарте C++ 17, охватывающие все, начиная от простых, таких как "встроенные переменные", "constexpr if" и все вплоть до "Полиморфных ресурсов памяти" и "Новых и удаленных с переподписанными данными".


Расширенный

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

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

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

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


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

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

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

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

C++ 11/14/17/… Ссылки:

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

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

  • Обзор нового C++ (C++ 11/14) (только PDF) (Скотт Мейерс) (обновлено для C++ 14) Это презентационные материалы (слайды и некоторые лекции) примечания) трехдневного учебного курса, предложенного Скоттом Мейерсом, который является весьма уважаемым автором C++. Несмотря на то, что список товаров короткий, качество высокое.

  • C++ Core Guidelines (C++ 11/14/17/…) (отредактированный Бьярном Страуструпом и Хербом Саттером) является развивающимся онлайн-документом, состоящим из набора руководств по использованию современных C++ Что ж. Руководящие принципы ориентированы на проблемы более высокого уровня, такие как интерфейсы, управление ресурсами, управление памятью и параллелизм, влияющие на архитектуру приложения и дизайн библиотеки. Проект был объявлен на CppCon'15 Бьярном Страуструпом и другими и приветствует вклад сообщества. Большинство руководств дополнены обоснованием и примерами, а также обсуждениями возможной поддержки инструмента. Многие правила специально разработаны для автоматической проверки с помощью инструментов статического анализа.

  • C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup и другие) - это попытка Фонда Standard C++ объединить часто задаваемые вопросы C++, которые ранее поддерживались индивидуально Marshall Cline и Bjarne Stroustrup, а также включение новых вкладов. Предметы в основном касаются вопросов на промежуточном уровне и часто написаны с юмористическим тоном. Не все элементы могут быть полностью обновлены до последней версии стандарта 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++ справочное руководство (Бьярн Страуструп, Маргарет А. Эллис) Эта книга довольно устарела, поскольку в ней рассматривается версия 1989 года C++ 2.0 - шаблоны, исключения, пространства имен и новые броски еще не были представлены, Однако, говоря, что эта книга проходит через весь стандарт C++ того времени, объясняя обоснование, возможные реализации и особенности языка. Это не книга для изучения принципов и шаблонов программирования на C++, но для понимания каждого аспекта языка C++.

  • Мышление в C++ (Брюс Экель, 2-е издание, 2000). Два тома; бесплатный набор учебников начального уровня. Загрузки: том 1, том 2. К сожалению, они омрачены рядом тривиальных ошибок (например, утверждение, что временные значения автоматически const), без официального списка ошибок. Частичный список ошибок [3] rd доступен по адресу (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, была бы очень хороша.