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

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

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

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

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

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

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

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

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

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

  • Шаблоны C++: полное руководство (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++, блокировки и мьютексы, а также вопросы проектирования и отладки многопоточных приложений.

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


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

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

  • Учебное пособие и справочник по стандартной библиотеке C++ (Николай Йосуттис) (обновлено для 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++. Имейте в виду, однако, что он предназначен исключительно как справка для опытных пользователей, желающих посвятить значительное время и усилия для его понимания. Стандарт C++17 выпущен в электронном виде за 198 швейцарских франков.

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

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

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

  • Super-FAQ по C++ (Marshall Cline, Bjarne Stroustrup и др.) - это попытка Standard C++ Foundation объединить часто задаваемые вопросы по 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++, вы, возможно, захотите прочитать его, хотя вам нужно взять с собой больше, чем просто кусочек соли. Первый том нового издания ожидается в 2018 году.

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

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

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

Другие вопросы по тегам