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

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

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

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

* Примечание. Часто задаваемые вопросы и другие ресурсы можно найти в тегах C ++ и в c ++ – faq .

начинающий

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

  • 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 языка программирования C ++, 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, третье издание меняет это и нацеливает программистов на такие языки, как Java. Он представляет ~ 50 легко запоминаемых эмпирических правил наряду с их обоснованием в очень доступном (и приятном) стиле. Для C ++ 11 и C ++ 14 примеры и несколько проблем устарели, и рекомендуется использовать эффективный современный C ++. [Обзор]

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

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

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

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

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

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

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

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

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


продвинутый

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

  • Scientific and Engineering 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). Главы о наследовании динамики немного сложны для понимания и не очень полезны. Обновленная версия этой classической книги, включающая семантику и уроки, извлеченные из STL, будет очень приятной.

  • Является ли идиома safe-bool устаревшей в C ++ 11?
  • Правильное использование стека и кучи в C ++?
  • Как реализовать classические алгоритмы сортировки в современном C ++?
  • Каковы все общие неопределенные типы поведения, о которых должен знать программист на C ++?
  • Каков правильный ответ для cout << a ++ << a ;?
  • Почему простая программа Hello World не скомпилирована с Turbo C ++?
  • Где найти текущие стандартные документы C или C ++?
  • Разрешить ошибки сборки из-за круговой зависимости между classами
  • Соответствуют ли скобки после имени типа с новым?
  • Почему бы заменить операторы нового и удаления по умолчанию?
  • Что такое rvalues, lvalues, xvalues, glvalues ​​и prvalues?
  • Interesting Posts

    Динамически Создать общий шаблон для шаблона

    Возможно ли открыть современные приложения пользовательского интерфейса на втором дисплее?

    Как сделать мультизагрузочный компакт-диск, который запустит выбранный пользователем ISO-файл

    Как вы загружаете файл в библиотеку документов в sharepoint?

    Твердые конденсаторы лопнут, ПК кажется прекрасным, насколько безопасно продолжать его использовать?

    Разница между HashSet и HashMap?

    Разница между int main () и int main (void)?

    Как нарисовать округленный прямоугольник в Android UI?

    Как разрешить локальный доступ к локальной сети при подключении к Cisco VPN?

    Простое обнаружение движения iPhone

    Несколько (3) мониторов с использованием видеокарты Intel iGPU + PCI-e

    Какой метод в Java используется для уничтожения ваших объектов

    от jquery $ .ajax до углового $ http

    MongoDB: найти значение в массиве с несколькими критериями

    В чем разница между 64-битными и 32-разрядными операционными системами?

    Давайте будем гением компьютера.