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


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

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

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

* Примечание: часто задаваемые вопросы и другие ресурсы можно найти в Информация тега C ++ и под ,


4253


источник


Ответы:


начинающий

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

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

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

* Не путать с C ++ Primer Plus (Стивен Прата), со значительно менее благоприятным обзор ,

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Шаблоны C ++: полное руководство (Дэвид Вандевоорд и Николай М. Йосуттис). Это книгу о шаблонах, существовавших до C ++ 11. Он охватывает все: от самых основ до самых продвинутых шаблонов метапрограммирования и объясняет каждую деталь того, как работают шаблоны (как концептуально, так и как они реализованы), и обсуждает многие распространенные ошибки. Имеет отличные сводки правила Единого определения (ODR) и разрешения перегрузки в приложениях. второе издание C ++ 11, C ++ 14 и C ++ 17 уже опубликованы. [Обзор]


продвинутый

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

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

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

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


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

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

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

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

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 ++ - (Андрей Кениг и Барбара Му) [Обзор]

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

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

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

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

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


3962