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

4250

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

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

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

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

Теги:
c++-faq

1 ответ

4463

начинающий

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

  • 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++ посредством "Приобретение ресурсов - инициализация (RAII)" в дополнение к углубленному охват множества других тем, включая идиому pimpl, поиск имени, хороший дизайн класса и модель памяти C++. [Обзор]

  • Подробнее Исключительный C++ (Херб Саттер) Охватывает дополнительные темы безопасности исключений, не охваченные в Исключительном 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++ Шаблон метапрограммирования (Дэвид Абрахамс и Алексей Гуртовой)

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

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

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


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

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

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

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

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

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

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

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

  • 338
    @G Rassovsky: Все книги, которые обещают учить X за Y часов. Например, изучите C ++ за 24 часа. Я считаю, что всех таких книг лучше избегать.
  • 99
    Я ненавижу наступать на чьи-то шкуры, но я не рекомендую «Мышление на С ++» Брюса Экеля, хотя я уважаю автора за бесплатную публикацию его материалов в Интернете. Перспектива книги предполагает относительно слабое или неэффективное использование C ++ и «объектно-ориентированного» программирования, сродни плохому применению шаблонов проектирования GoF. Я нахожу это интересной вводной книгой по программированию в целом, но, когда кто-то становится более знакомым с программированием и (особенно) компьютерной наукой в целом, я нахожу книги, которые думают чисто в «классических» терминах ООП, вредных для образования.
Показать ещё 15 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню