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

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

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

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

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

4253
задан grepsedawk 23 дек. '08 в 8:23
источник поделиться

1 ответ

Начальный

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

  • С++ Primer * (Стэнли Липпман, Хосе Ладжои и Барбара Э. Му) (обновлено для С++ 11). На странице с 1k это очень подробное введение в С++, которое охватывает практически все на языке в очень доступном формате и очень подробно. Пятое издание (выпущенное 16 августа 2012 года) охватывает С++ 11. [Обзор]

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

<суб > * Не путать с С++ Primer Plus (Stephen Prata) со значительно менее благоприятным review. Суб >

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

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

  • Ускоренный С++ (Andrew Koenig and Barbara Moo, 1st Edition - 24 августа 2000 г.) Это в основном охватывает ту же тему, что и С++ Primer, но делает это на четвертой части. Это во многом потому, что он не пытается быть введением к программированию, а представляет собой введение в С++ для людей, которые ранее программировались на каком-то другом языке. Он имеет более крутую кривую обучения, но для тех, кто справляется с этим, это очень компактное введение в язык. (Исторически сложилось так, что это стало новым основанием, став первой книгой для начинающих, использующей современный подход к обучению языку.) Несмотря на это, С++ он учит чисто С++ 98. [Обзор]

Рекомендации

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

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

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

Intermediate

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

  • Исключительный С++ (Herb Sutter) Представленный в виде набора головоломок, это одно из лучших и тщательных обсуждений правильного управление ресурсами и безопасность исключений на С++ посредством Resource Assquisition - это Инициализация (RAII) в дополнение к углубленному охвату множества других тем, включая идиому pimpl, поиск имени, хороший дизайн класса и модель памяти С++. [Обзор]

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

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

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

  • С++ Templates: Полное руководство (David Vandevoorde и Nicolai M. Josuttis) Это книга о шаблонах, существовавших до этого С++ 11. Он охватывает все: от самых основ до самых продвинутых шаблонов метапрограммирования и объясняет каждую деталь того, как работают шаблоны (и концептуально, и как они реализованы), и обсуждает многие распространенные ошибки. Имеет отличные сводки правила Единого определения (ODR) и разрешения перегрузки в приложениях. A второе издание, охватывающее С++ 11, С++ 14 и С++ 17 уже опубликовано. [Обзор]


Дополнительно

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

  • С++ Template Metaprogramming (Дэвид Абрахамс и Алексей Гуртовой)

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

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


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

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

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

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

С++ 11/14 Ссылки:

  • Стандарт С++ (INCITS/ISO/IEC 14882-2011) Это, конечно, последний арбитр всего этого является или не является С++. Однако имейте в виду, что это предназначено исключительно как ссылка для опытных пользователей, желающих посвятить значительное время и усилия своему пониманию. Как обычно, первый релиз был довольно дорогим ($ 300 + US), но теперь он был выпущен в электронном виде за 60 долларов США.

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

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

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

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

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


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

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

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

  • размышления на С++ - (Andrew Koenig and Barbara Moo) [Обзор]

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

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

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

  • Справочное руководство по аннотированным С++ (Bjarne Stroustrup, Margaret A. Ellis) Эта книга довольно устарела в том, что она исследует версия С++ 2.0 1989 г. - Шаблоны, исключения, пространства имен и новые ролики еще не введены. Сказав, что, однако, эта книга проходит весь стандарт С++ того времени, объясняя логику, возможные реализации и особенности языка. Это не книга для изучения принципов и шаблонов программирования на С++, но для понимания каждого аспекта языка С++.

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

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

3922
ответ дан Johannes Schaub - litb 23 дек. '08 в 8:52
источник поделиться

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