- Table of content
- 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
- Low-Level High-Performance Optimizations
- Algorithms in C and C++
- Latest Features Review: C++11/14
- Latest Features Review: C++17
- Latest Features Review: C++20
- Software Design and Design Patterns in C++
- GUI Programming
- Secure Programming Practices
- Windows System Programming
- Windows Kernel Programming
- Linux System Programming
- Linux Kernel Programming
- C++ Embedded Programming
- Network Programming
- Computer Graphics in C++
- Game Development in C++
- Financial Applications of C++
- Hardware Design in C++
- Modern C Programming
- 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.
I created this catalog and keep maintaining it in my spare time. If you wish to thank me for my efforts, you always can buy me a coffee.
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++ 3rd Edition (Bjarne Stroustrup, 2022)
- C and C++ Under the Hood (Anthony J. Dos Reis, 2019)
- Discovering Modern C++, 2nd Edition (Peter Gottschling, 2021)
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.
- Professional C++ 5th Edition (Marc Gregoire, 2021)
- C++ Common Knowledge: Essential Intermediate Programming (Stephen C. Dewhurst, 2005)
- C++ Cookbook: Solutions and Examples for C++ Programmers (D. Ryan Stephens, 2005)
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs 3rd Edition (Scott Meyers, 2005)
- 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.
- 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)
- 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)
- The Art of Writing Efficient Programs (Fedor G. Pikus, 2021)
- C++ Best Practices (Jason Turner, 2022)
- Beautiful C++: 30 Core Guidelines for Writing Clean, Safe, and Fast Code (J. Davidson, Kate Gregory, 2021)
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 (Edouard Alligand, Joel Falcou, 2016)
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)
- Concurrency with Modern C++ (Rainer Grimm, 2021)
C++ is a high-performance language by itself, however, there are plenty of usecases when the "default high-performance" is just not enough. Usually such topics are considered in the literature on parallel programming, but it includes an important subset concentrating exactly on low-level performance techniques relying on hardware (SIMD, CPU cache, process affinity), rather than software implementation of multithreaded algorithms.
- Computer Systems: A Programmer's Perspective (Randal Bryant, David O'Hallaron, 2015)
- Parallel Programming: Concepts and Practice (Bertil Schmidt, Jorge Gonzalez-Dominguez, Christian Hundt, 2017)
- Is Parallel Programming Hard, And, If So, What Can You Do About It? (Paul McKinley, 2021)
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 and Algorithm Analysis in C++ 4th Edition (Mark Weiss, 2013)
- Hacker's Delight (Henry Warren, 2012)
- Elements of Programming Interviews (Adnan Aziz, 2012)
Not much to add, books covering the first major push in C++ language Standard, C++11/14.
- C++11 for Programmers 2nd Edition (Paul Deitel, Harvey Deitel, 2013)
- Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 (Scott Meyers, 2014)
The next major update, C++17 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.
- C++ 20 (Rainer Grimm, 2021)
- C++ Lambda Story: Everything you need to know about Lambda Expressions in Modern C++ (Bartlomiej Filipek, 2021)
- Modern C++ Programming Cookbook 2nd Edition (Marius Bancila, 2020)
- Exploring C++20: The Programmer's Introduction to C++ (Ray Lischner, 2020)
- The C++ Standard Library (Rainer Grimm, 2021)
- Programming with C++20 (Andreas Fertig, 2021)
- C++20 - The Complete Guide (Nicolai M. Josuttis, the book is 90% complete as of May 2022)
- C++ Concepts (Sandor Dargo, 2022)
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)
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)
- Programming Windows 10 Via UWP (Roger Deutsch, 2017)
Lots of Software Developers heard about software vulnerabilities more than once, and still, very few of them pay at least slightest attention, considering IT Security highly specialized industry they do not belong to. However, they are mistaken, most of typical attacks, like spoofing, buffer overflows, and denial of service happen because of poorly written and poorly tested applications. Meanwhile, practices of writing secure code and hardening applications security in general are well known, and you should embrace it once and for all, if you are ever planning to write mission-critical applications.
- Writing Secure Code (David LeBlanc, 2002)
- Embracing Modern C++ Safely (John Lakos, Vittorio Romeo, Rostislav Khlebnikov, Alisdair Meredith, 2021)
- Secure Coding in C and C++ (Robert C. Seacord, 2013)
- Secure Programming Cookbook for C and C++ (John Viega, 2003)
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, 2021)
- 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)
C++ 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)
- Practical Robotics in C++ (Lloyd Brombach, 2021)
- Embedded Systems Architecture (Daniele Lacamera, 2018)
- Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming (Christopher Kormanyos, 2021)
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)
- Unreal Engine C++ the Ultimate Developer's Handbook (Stephen Seth Ulibarri, 2020)
C++ is a popular choice for financial applications for pretty much the same reason as for other industries, requiring fast execution, fine-grained memory management, and access close to computer hardware. For decades it was the only viable choice for financial instruments pricing, risk management and algorithmic trading.
- Financial Instrument Pricing Using C++ (Daniel J. Duffy, 2004)
- Quantitative Finance: An Object-Oriented Approach in C++ (Erik Schlogl, 2013)
- Building Financial Risk Management Applications with C++ (Robert Brooks, 2013)
- C++ for Financial Mathematics (John Armstrong, 2017)
- Hedge Fund Modelling and Analysis: An Object Oriented Approach Using C++ (David Hampton, Paul Darbyshire, 2016)
One can be surprised that C++ came into this niche application as well, dominated by specialized hardware description languages (HDLs) like Verilog and VHDL. However, using C++ for the purpose of SoC design offers a number of major advantage - it provides a seamless integration between hawardre and software parts of the system, and better abstraction compared to procedural HDLs.
- SystemC: From the Ground Up (David C. Black, Jack Donovan, 2009)
- Simulation, Design Abstraction, and SystemC (Ed Harcourt, 2007)
- An Introduction to System Level Modeling in SystemC 2.0 (Stuart Swan, 2001)
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)
No comments here. Some books are just valuable pieces of the history of C++ language, some still keep never-aging ideas and solutions.
- Effective C++: 50 Specific Ways to Improve Your Programs and Designs Subsequent Edition (Scott Meyers, 1997)
- More Effective C++: 35 New Ways to Improve Your Programs and Designs (Scott Meyers, 1996)
- 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)
- Modern C++ Design: Generic Programming and Design Patterns Applied (Andrei Alexandrescu, 2001)
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.