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

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

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

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

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

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

начинающий

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

  • C++ Primer * (Stanley Lippman, Josée Lajoie и Barbara E. Moo) (обновлено для C++ 11). Приходя на 1k страниц, это очень подробное введение в C++, которое охватывает почти все на языке в очень доступный формат и очень подробно. Пятое издание (выпущенное 16 августа 2012 года) охватывает C++ 11. [Обзор]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


продвинутый

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


Классика/Пожилые

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

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

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

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

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

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

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

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

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

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

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