Подборка книг по C++ для любого уровня

Хотите начать изучать C++, но не знаете с чего начать? Или подтянуть свои знания в С++? В статье приведен перечень полезных книг.

5

Начинающий

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

«Программирование: принципы и практика использования C++» (Бьёрн Страуструп) (обновлено для С++11/С++14) Введение в программирование на языке С++, написанное автором этого языка. Хорошая книга, не требующая опыта в программировании, но она будет полезна не только новичкам.

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

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

*Не путать с «C++ Primer Plus» (Стивен Прата) с менее удобным обзором.

«Обзор С++» (Бьёрн Страуструп) «Обзор» — это краткий (около 180 страниц и 14 глав) учебный обзор всего в стандартном С++ (язык и стандартная библиотека и использование С++11) на несколько более высоком уровне для людей, уже знакомых с С++ или, по крайней мере, имеющих опыт в программировании. Эта книга является расширенной версией материала, составляющего главы 2-5 четвёртого издания «Языка программирования С++».

«Accelerated C++» («Ускоренный С++») (Эндрю Кёниг и Барбара Му) Эта книга в основном охватывает те же темы, что и «C++ Primer», но по объёму занимает только четверть той книги. В значительной степени это так, потому что это не введение в программирование, а введение в С++ для людей, которые раньше программировали на каком-то другом языке. В этой книге более быстрый темп обучения, но для тех, кто сможет осилить его, эта книга окажется очень сжатым введением в язык. (Исторически, эта книга открыла новые возможности, став первой книгой для начинающих, в которой использовался современный подход к изучению языка.) [Обзор]

«Thinking in C++» («Мышление на С++») (Брюс Эккель) Два тома; Этот учебник, написанный в свободном стиле, послужить хорошим предисловием к более сложным книгам. Загрузить: том 1, том 2. К сожалению, с них встречается ряд мелких ошибок (например, утверждение, что временные переменные автоматически const), нет официального списка ошибок. Часть ошибок можно посмотреть здесь, но это, по-видимому, не поддерживается.

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

«Effective C++» («Эффективное использование C++») (Скотт Майерс). Эта книга была написана с целью стать второй лучшей книгой для программистов, пишущих на языке С, и ей это удалось. Ранние издания были больше ориентированы на программистов, работавших с языками С, в третьем издании это поменялось, и книга переориентировалась на тех, кто работает с языками типа Java. Книга представляет собой 50 легких для запоминания основанных на опыте правил вместе с их обоснованием в очень доступной (и приятной) форме. Для С++11 и С++14 некоторые примеры и вопросы устарели, поэтому в этом случае «Effective Modern C++» («Эффективный и современный С++» предпочтительнее. [Обзор]

«Effective Modern C++» («Эффективный и современный С++») (Скотт Майерс). По сути это новая версия «Effective C++» («Эффективное использование C++»), ориентированная на С++ программистов, переходящих от С++03 к С++11 и С++14.

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

Средний уровень

«More Effective C++» («Более эффективное использование C++») (Скотт Майерс). Ещё больше основанных на опыте More Exceptional C++правил, чем в «Effective C++». Они не такие важные, как те из первой книги, но всё-таки неплохо знать и их.

«Exceptional C++» («Решение сложных задач на С++») (Герб Саттер). Книга представлена в виде набора головоломок, это одно из лучших и всесторонних обсуждений надлежащего управления ресурсами и исключительной безопасности в С++ через RAII (получение ресурса есть инициализация), в дополнение к углублённому изучения таких вопросов, как идиомы pimpl, поиск имён, хорошее проектирование классов и модель памяти С++. [Обзор]

«More Exceptional C++» («Новые сложные задачи на C++») (Герб Саттер). Охватывает дополнительные темы безопасности, не затронутые в «Exceptional C++» в дополнение к обсуждению эффективного объектно-ориентированного программирования в C++ и правильного использования STL. [Обзор]

«Exceptional C++ Style» (Герб Саттер). В книге обсуждается общее программирование, оптимизация и управление ресурсами; в этой книге также хорошо описано, как писать модульный код на С++ с использованием функций, не являющихся членами класса, и принципом единой ответственности. [Обзор]

«C++ Coding Standards» («Стандарты программирования на С++») (Герб Саттер, Андрей Александреску). Выражение «стандарты программирования» здесь не означает «сколько пробелов я должен поставить в своём коде?». В этой книге содержится более ста лучших задач, идиом и распространенных ошибок, которые могут помочь вам написать правильный, понятный и эффективный код на С++. [Обзор]

«C++ Templates: The Complete Guide» («Шаблоны С++: полное руководство») (Дэвид Вандевурд и Николаи М. Джосаттис). Это книга о тех шаблонах, которые существовали до С++11. Она охватывает всё от самых основ до некоторых наиболее передовых шаблонов метапрограммирования и объясняет каждую деталь работы шаблонов (как саму идею, так и то, как она реализовывается), в ней обсуждаются многие общие ошибки. В книге содержится отличное обобщение правила одного определения (ODR) и разрешения совмещения в приложениях. Выход второго издания запланирован на 2016 год. [Обзор]

Продвинутый уровень

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

«C++ Template Metaprogramming» («Шаблонное метапрограммирование на С++») (Дэвид Абрахамс и Алексей Гуртовой)

«C++ Concurrency In Action» («Параллельное программирование на С++ в действии») (Энтони Вилльямс). Книга освещает параллельное программирование на С++11, включая потоковые библиотеки, атомарные библиотеки, модель памяти С++, шлюзы и блокировки, а также вопросы проектирования и отладки многопоточных приложений.

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

Книги-справочники: все уровни

«The C++ Programming Language» («Язык программирования С++») (Бьёрн Страуструп) (обновлено для С++11). Классическое введение в С++, написанное его создателем. Написанная параллельно в классическим K&R, эта книга действительно очень похожа на него и охватывает почти всё от основного языка до стандартной библиотеки и парадигм программирования в философии языка. (Из-за этого последнее издание превысило отметку в 1000 страниц.) [Обзор] Четвёртое издание (опубликовано 19 мая 2013) охватывает С++11.

«C++ Standard Library Tutorial and Reference» («C++ Стандартная библиотека. Для профессионалов») (Николай Джосьютис) (обновлено для С++11). Введение и источники для стандартной библиотеки С++. Второе издание (опубликовано 9 апреля 2012) охватывает С++11. [Обзор]

«The C++ IO Streams and Locales» («IO потоки и области С++») (Анжелика Лангер и Клаус Крефт). Про эту книгу мало что можно сказать, за исключением того, что если вы хотите знать всё о потоках и областях, то это именно то, что поможет вам найти окончательные ответы. [Обзор]

Справочники для С++11:

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

«Overview of the New C++ (C++11/14)» («Обзор нового С++») (только в pdf) (Скотт Майерс) (обновлено для C++1y/C++14). Здесь представлены репрезентационные материалы (слайды и записи некоторых лекций) трёхдневного курса, который проводил Скотт Майерс, который является многоуважаемым автором языка С++. Даже если список тем маленький, качество остаётся высоким.

Классика/старые издания

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

«The Design and Evolution of C++» («Дизайн и эволюция С++») (Бьёрн Страуструп). Если вы хотите знать, почему язык такой, какой он есть, то в этой книге вы найдёте ответы. В этой книге охвачены все вопросы до стандартизации С++.

«Ruminations on C++» («Размышления на С++») (Эндрю Кениг и Бабрара Бу) [Обзор]

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

«Large Scale C++ Software Design» («Крупномасштабная разработка программного обеспечения на С++») (Джон Лакос). Лакос объясняет методы работы с крупными проектами по разработке программного обеспечения на С++. Разумеется, эту книгу полезно читать, только если вы в курсе дела. Она была написана задолго до С++98, и в ней недостаёт многих вещей (например, пространства имён), важных для крупных проектов. Если вам нужно работать над большим проектом по разработке программного обеспечения на С++, вы можете прочитать эту книгу, однако вам стоит отнестись к ней с некоторым недоверием. Выход первого тома нового издания ожидается в 2015 году.

«Inside the C++ Object Model» («Внутри объектной модели С++») (Стэнли Липпман). Если вы хотите знать, как виртуальная компонентная функция обычно реализуется и как база объектов закладывается в память сценария с несколькими наследованиями, и как всё это влияет на производительность, то в этой книге вы найдёте подробное обсуждение таких тем.

Источник: Stack Overflow

МЕРОПРИЯТИЯ

Комментарии

 
 
02 ноября 2022

Вы бы хоть перевод правильный сделали чтоли... Ну и как минимум внимательней посмотрели какие к какому блоку книги относятся

16 апреля 2020

Я уж думал, что здесь одни и те же книги для любого уровня.

14 февраля 2020

Подскажите пожалуйста, может существует что-то по стандартам с++11, 14, 17 и так далее? Чтоб подробно описывалось и рассказывалось, может задачки какие для отработки. Хочу структурировать в голове, познать их и, конечно же, отработать на практике

17 февраля 2020

1) Джоссатис "Стандартная библиотека C++11" 2) Галовиц "STL17" 3) Вандервурд, Джоссатис "Шаблоны" Первые две 11 и 17 стандарты охватывают. Последняя в рамках шаблонов описывает все три стандарта. Во всех есть достаточное количество грамотных примеров.

ВАКАНСИИ

Добавить вакансию
Senior Software Engineer (Java)
от 4500 USD до 6000 USD
Senior DevOps Engineer
по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

LIVE >

Подпишись

на push-уведомления