- Intro: iterating over C++ books
- Reference and ISO Standard
- Beginner to Programming
- Beginner to C++
- General Books on C++
- Advanced Books on C++
- C++ Templates and Metaprogramming
- C++ Concurrency and Distributed Programming
- Algorithms in C and C++
- Latest Features Review: C++11/14
- Latest Features Review: C++17
- Latest Features Review: C++20
- Modern C Programming
- GUI Programming
- Windows System Programming
- Windows Kernel Programming
- Linux System Programming
- Linux Kernel Programming
- Linux Embedded Programming
- Network Programming
- Computer Graphics in C++
- Game Development in C++
- Software Design and Design Patterns in C++
- Old and Classic books on C++
No secret, most of the C++ books on the market are for absolute beginners, and 90% of them are bad. Few good books for intermediate-to-advanced developers, but finding and advising a good read on C++ is almost a scientific problem.
The same with attempts to create some C++ books catalog, here's an example of not the most optimal choice:
Best C++ Books for Beginners and Advanced Level in 2021. Why so? Well, I do not consider books of series "one hour a day" or "for dummies" a worthy technical read. We all know the best way to learn C++ in 21 days
Also, all kinds are reference book in fact are being outdated by the moment of release - the role of a comprehensive C++ reference successfully taken by Cppreference.com, and it's totally fine.
The next problem of C++ book lists is a diversity of C++ applied areas - C++ is a truly universal language, but every applied domain features a different approach and usually requires specific knowledge. System programming, game development, user- and kernel-space. Some books use C++ as a language of choice to solve the high-level problem, like algorithms and software design in C++.
And finally, the comprehensive C++ list is expected to be up-to-date at least with the last language Standard, and just with new interesting books - this list is not bad, even though some choices are questionable, but it's already outdated, not including any books on C++20 one year after the new Standard release. The most effective way to achieve this state is a continuous community effort, that's why I choose Github as a medium of my C++ books list.
I was extremely upset myself by the fact I have to use references almost exclusively to Amazon products, but unfortunately, I did not find any alternative source, being the same uniform, comprehensive and trustworthy. By providing these links I do not promote using Amazon services, I do not suggest using it for your purchases, and I do not insert any referrals. Maybe in the future, I will create a catalog of C++ books, providing complete information about listed books, such as author names and brief information about them, release year, annotation, and so on.
I would welcome any reasonable contributions in the objective to create a comprehensive and up-to-date catalog of C++ books, for all kinds of C++ programmers, with any professional background and experience. While using or replicating the content, a Creative Commons Attribution-NonCommercial 4.0 International License is applied.
The release of the C++ Standard is quite a pricey document. However, every C++ Standard has a number of drafts before the release, and usually, the last one is almost identical to the release document. The following links to the Standard refer to the last draft versions before the release
There's not much to add - books for beginners to C++, and probably to programming in general.
- C++ Primer 5th Edition (Stanley B. Lippman, 2012)
- Programming: Principles and Practice Using C++ 2nd Edition (Bjarne Stroustrup, 2014)
- Beginning C++ Through Game Programming 4th Edition (Michael Dawson, 2014)
- Beginning C++ Game Programming (John Horton, 2019)
- Starting Out with C++ from Control Structures to Objects (Tony Gaddis, 2017)
- C++ How to Program 10th Edition (Paul Deitel, Harvey Deitel, 2016)
These books are for software developers with some experience in other languages, and willing to become familiar with C++
- A Tour of C++ 2nd Edition (Bjarne Stroustrup, 2018)
- C and C++ Under the Hood (Anthony J. Dos Reis, 2019)
These books could be considered a "must-read" list for any kind of C++ programmer. Some of them are a bit outdated, as they cover previous versions of the C++ Standard - in this case, just skip outdated content, or better re-implement it using new features of the language.
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs (Scott Meyers, 2005)
- More Effective C++: 35 New Ways to Improve Your Programs and Designs (Scott Meyers, 1996)
- Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library (Scott Meyers, 2001)
- Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions (Herb Sutter, 1999)
- More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions (Herb Sutter, 2001)
- Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions (Herb Sutter, 2004)
- C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (Herb Sutter, Andrei Alexandrescu, 2004)
- C++ Programming Language 4th Edition (Bjarne Stroustrup, 2013)
- C++ Standard Library: A Tutorial and Reference 2nd Edition (Nicolai M. Josuttis, 2012)
- Standard C++ Iostreams and Locales: Advanced Programmer's Guide and Reference (Angelika Langer, 2000)
If you have 5+ years of experience, you should add these books to your library as well. Again, some books may contain outdated features and approaches, but in the general picture, they still provide extremely valuable knowledge.
- Professional C++ 5th Edition (Marc Gregoire, 2012)
- Functional Programming in C++: How to improve your C++ programs using functional techniques (Ivan Cukic, 2018)
- C++ High Performance: Master the art of optimizing the functioning of your C++ code 2nd Edition (Björn Andrist, 2020)
- Memory Management Algorithms And Implementation In C/C++ (Bill Blunden, 2002)
- Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms (pdf) (Agner Fog, 2004)
- Optimizing subroutines in assembly language: An optimization guide for x86 platforms (pdf) (Agner Fog, 2004)
- Calling conventions for different C++ compilers and operating systems (pdf) (Agner Fog, 2004)
- What Every Programmer Should Know About Memory (pdf) (Ulrich Drepper, 2007)
- C++ Common Knowledge: Essential Intermediate Programming (Stephen C. Dewhurst, 2005)
- C++ Cookbook: Solutions and Examples for C++ Programmers (D. Ryan Stephens, 2005)
- Design Patterns in Modern C++: Reusable Approaches for Object-Oriented Software Design (Dmitri Nesteruk, 2018)
- Learning Boost C++ Libraries (Arindam Mukherjee, 2015)
- Boost C++ Application Development Cookbook (Antony Polukhin, 2013)
- Software Optimization Resources by Agner Fog
C++ "template magic" books, mostly up-to-date with at least C++11 Standard.
- C++ Templates: The Complete Guide 2nd Edition (David Vandevoorde, Nicolai Josuttis, 2017)
- Advanced C++ Metaprogramming (Davide Di Gennaro, 2011)
- Practical C++ Metaprogramming (2016, Edouard Alligand, Joel Falcou)
Having a “multithreaded” type of mindset if necessary, if you work with modern architectures. The average system may offer 4-12 cores on desktop, and 128-256 on a server, and an experienced C++ developer absolutely should know, how to take advantage of these resources. Some books are updated with the C++17 Standards, some are just fundamental read on the topic.
- C++ Concurrency in Action, Second Edition (Anthony Williams, 2019)
- C++ Reactive Programming (Praseed Pai, Peter Abraham, 2018)
- Parallel and Distributed Programming Using C++ (Cameron Hughes, 2003)
- The Art of Multiprocessor Programming 2nd Edition (Maurice Herlihy, 2020)
- C++ Multithreading Cookbook (Miloš Ljumović, 2014)
Algorithms is a fundamental topic indeed, usually language-independent, and such books age like a good wine - that's why following the last language Standard is not necessary here.
- Implementing Useful Algorithms in C++ (Dmytro Kedyk, 2020)
- Algorithms in C++ 3rd Edition (Robert Sedgewick, 2001)
- Data Structures and Algorithms in C++ 2nd Edition (Michael T. Goodrich, 2011)
- Data Structures & Algorithm Analysis in C++ 4th Edition (Mark Weiss, 2013)
- Hacker's Delight (Henry Warren, 2012)
Not much to add, books covering the first major push in C++ language Standard, C++11/14.
- Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 (Scott Meyers, 2014)
- Presentation Materials: Overview of the New C++ (C++11/14) (Scott Meyers, 2015)
The next major update, introducing many important features and changing old paradigms and approaches.
- C++17 STL Cookbook (Jacek Galowicz, 2017)
- C++17 in Detail (Bartłomiej Filipek, 2019)
- C++17 The Complete Guide (Nicolai M. Josuttis, 2020)
- The Modern C++ Challenge (Marius Bancila, 2018)
- Mastering the C++17 STL (Arthur O'Dwyer, 2017)
Many C++20 features could be considered truly revolutionary, changing old good C++ almost beyond recognition.
- The C++ Standard Library (Rainer Grimm, 2021)
- C++ Lambda Story: Everything you need to know about Lambda Expressions in Modern C++ (Bartlomiej Filipek, 2021)
- Modern C++ Programming Cookbook (Marius Bancila, 2020)
- Exploring C++20: The Programmer's Introduction to C++ (Ray Lischner, 2020)
Our allies from the non-OOP world. The emphasis of selected books made on new features of C, particularly on C11 and C17.
- Effective C: An Introduction to Professional C Programming (Robert C. Seacord, 2020)
- Modern C (Jens Gustedt, 2019)
- Extreme C: Taking you to the limit in Concurrency, OOP, and the most advanced capabilities of C (Kamran Amini, 2019)
- C Programming: A Modern Approach (K. N. King, 2008)
- Object-Oriented Programming With ANSI C (Axel Schreiner, 2011)
Books on C++ GUI frameworks and desktop programming in general. Some are featuring cross-platform approach, taking advantage of the system-independent nature of C++, some are Windows-specific.
- Qt5 C++ GUI Programming Cookbook (Lee Zhi Eng, 2019)
- Mastering Qt 5 (Guillaume Lazar, 2018)
- Advanced Qt Programming (Mark Summerfield, 2016)
- Qt5 C++ GUI Programming Cookbook (Lee Zhi Eng, 2019)
- Programming Windows 10 Via UWP (Roger Deutsch, 2017)
Windows "under the hood" programming. Some books may seem old, but in fact, none of the provided information on Windows API is outdated. New features are carefully placed on the foundation of old features, which are in their turn are extremely important for providing backward compatibility. Windows API features both C interfaces, so as C++ technologies like COM.
- Windows via C/C++ 5th Edition (Jeffrey M. Richter, 2007)
- Windows Via C/C++ Reprint Edition (Pavel Yosifovich, Jeffrey M. Richter, 2019)
- C++ Windows Programming (Stefan Björnander, 2016)
- Windows 10 System Programming, Part 1 (Pavel Yosifovich, 2020)
- Windows 10 System Programming, Part 2 (Pavel Yosifovich, 85% complete at the moment)
- Programming Windows 6th Edition (Charles Petzold, 2013)
- Windows System Programming 4th Edition (Johnson M. Hart, 2010)
- Programming Windows Security (Keith Brown, 2010)
- Windows 64-bit Assembly Language (Robert Dunne, 2018)
- Inside Windows Debugging (Tarik Soulami, 2012)
- Getting Started with WinDbg (MS documentation page)
- Programming Server-Side Applications for Microsoft Windows (Jeffrey Richter, 2000)
Kernel-level Windows programming. New approaches and technologies are provided where possible, but it's quite hard to find a good read on the latest kernel-space technologies and Developer Kits because they hardly exist.
- Windows Internals, Part 1: System architecture, processes, threads, memory management (Pavel Yosifovich, 2017)
- Windows Internals, Part 2 (Andrea Allievi, Mark Russinovich, 2021)
- Developing Drivers with the Windows Driver Foundation (Penny Orwick, 2007)
- Windows Kernel Programming (Pavel Yosifovich, 2021)
System user-space programming for Linux and POSIX systems in general. Some are new books, some are new editions of classical books on Unix-like systems. Practically all POSIX-like APIs feature C interfaces.
- Linux System Programming Techniques (Jack-Benny Persson, 2021)
- The Linux Programming Interface: A Linux and UNIX System Programming Handbook (Michael Kerrisk, 2010)
- Advanced Programming in the UNIX Environment 3rd Edition (W.Stevens, Stephen Rago, 2013)
- Beginning Linux Programming 4th Edition (Neil Matthew, 2007)
- Linux System Programming: Talking Directly to the Kernel (Robert Love, 2013)
- The Art of UNIX Programming (Eric Raymond, 2003)
- Hands-On System Programming with C++ (Rian Quinn, 2018)
- Hands-On System Programming with Linux (Kaiwan N Billimoria, 2018)
- Advanced Linux Programming (CodeSourcery LLC, 2001)
The comprehensive reading list for Linux kernel-space programming. The choice is considerably wider than similar books on Windows.
- Linux Kernel Development (Jack-Benny Persson, 2021)
- Linux Kernel Networking: Implementation and Theory (Rami Rosen, 2013)
- Linux Kernel Programming (Kaiwan N Billimoria, 2021)
- Linux Kernel Programming Part 2 - Char Device Drivers and Kernel Synchronization (Kaiwan N Billimoria, 2021)
- Mastering Linux Device Driver Development (John Madieu, 2021)
- Linux Device Drivers Development: Develop customized drivers for embedded Linux (John Madieu, 2017)
- Linux Device Driver Development Cookbook (Rodolfo Giometti, 2019)
Linux embedded programming, kernel-level with some restrictive specific.
- Mastering Embedded Linux Programming (Chris Simmonds, 2015)
- Mastering Embedded Linux Programming: Unleash the full potential of Embedded Linux (Chris Simmonds, 2017)
- Embedded Linux Systems with the Yocto Project (Rudolf Streif, 2016)
- Hands-On Embedded Programming with C++17 (Maya Posch, 2019)
C/C++ network programming is an extremely important area of knowledge, due to their exceptional performance and implementation of high-loaded client-server solutions. The subject has a slight lean towards Linux, but without many system-specific features, and could be considered almost totally cross-platform.
- Boost.Asio C++ Network Programming Cookbook (Dmytro Radchuk, 2016)
- Boost.Asio C++ Network Programming 2nd Edition (Wisnu Anggoro , John Torjo, 2015)
- Hands-On Network Programming with C (Lewis Van Winkle, 2019)
- Understanding Linux Network Internals (Christian Benvenuti, 2006)
These books cover cross-platform APIs for rendering 2D and 3D graphics. All graphical system-level APIs, both modern and legacy, offer either C (OpenGL) or C++ (Direct3D) interfaces. The reason is again, the exceptional performance of C/C++ and the ability to squeeze the maximum of available graphical hardware.
- OpenGL 4 Shading Language Cookbook (David Wolff, 2020)
- Computer Graphics Programming in OpenGL with C++ (V. Scott Gordon, 2018)
- Learn OpenGL (Joey de Vries, 2020)
- Direct3D Rendering Cookbook (Justin Stenning, 2014)
- Introduction to 3D Game Programming with DirectX 12 (Frank Luna, 2016)
Game development could be considered as a derivative of C++ Computer Graphics, however, game development is much more than just graphics. The selected read covers different aspects of C++ Game Programming, from guides on how to enter the industry to popular C++ Game Engines. Even though other languages, like C# or Python, currently share the market with C++ frameworks, all AAA titles are still being developed in C++.
- C++ Game Development By Example (Joey de Vries, 2020)
- Foundations of Game Engine Development (2 books) (Eric Lengyel, 2020)
- Game Programming Patterns (Robert Nystrom, 2014)
- Hands-On C++ Game Animation Programming (Gabor Szauer, 2020)
- Game Programming in C++: Creating 3D Games (Sanjay Madhav, 2018)
- Getting Started with C++ Audio Programming for Game Development (David Gouveia, 2013)
- Unreal Engine 4 Game Development Quick Start Guide (Rachel Cordone, 2019)
- Unreal Engine 4 Virtual Reality Projects (Kevin Mack, 2019)
- Unreal Engine 4 Scripting with C++ Cookbook (William Sherif , Stephen Whittle, 2016)
Software design and architecture in C++ came a long way from the GoF book, released in 1994. Since then, some design patterns became just language features, some are changed beyond recognition - that's why it's vital to consider new language features, thinking of implementing a particular software design solution.
- Design Patterns in Modern C++ (Dmitri Nesteruk, 2018)
- Software Architecture with C++ (Adrian Ostrowski , Piotr Gaczkowski, 2021)
- Large-Scale C++ Volume I: Process and Architecture (John Debbie Lafferty, 2019)
- Large-Scale C++ Volume II: Design and Implementation (John Debbie Lafferty, 2021)
- API Design for C++ (Martin Reddy, 2011)
No comments here. Some books are just valuable pieces of the history of C++ language, some still keep never-aging ideas and solutions.
- Advanced C++ Programming Styles and Idioms (James O. Coplien, 1991)
- Design and Evolution of C++ (Bjarne Stroustrup, 1994)
- Design Patterns: Elements of Reusable Object-Oriented Software (GoF, 1994)
- Large-Scale C++ Software Design (John Lakos, 1996)
- C++ for Real Programmers Revised Edition (Jeff Alger, 1998)
- Thinking in C++, Vol. 1: Introduction to Standard C++ (Bruce Eckel, 2000)
- Thinking in C++, Volume 2: Practical Programming (Bruce Eckel, 2003)
- The Boost Graph Library: User Guide and Reference Manual (Jeremy G. Siek, Lie-Quan Lee, 2001)
- Modern C++ Design: Generic Programming and Design Patterns Applied (Andrei Alexandrescu, 2001)
- C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (David Abrahams, Aleksey Gurtovoy, 2004)
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.