This article references professional opinions from multiple C++ practitioners, collecting and filtering a large amount of publicly available quality learning content, and has compiled this complete C++ learning resource. The content includes all interview articles of Bjarne Stroustrup, the father of C++, high-quality electronic books and manuals, practical open-source projects, and a summary of interview questions.
The open-source projects have been packaged into a resource package. Follow our official account or scan the QR code to reply 【Comprehensive】 to receive it..

Everyone can learn in chronological order to better understand the development history of C++ and the author’s thoughts. I hope this resource package can benefit many C++ learners.


C++ Development Timeline
- The history of the C++ programming language dates back to 1979 when Bjarne Stroustrup did some development for his doctoral thesis. Of all the languages available to Stroustrup, there was one called Simula, which was primarily designed for simulation. The Simula 67 language is a variant used by Stroustrup and is considered a major language supporting the object-oriented programming paradigm. Stroustrup found this paradigm helpful for encapsulation development. However, Simula was too slow for practical use. Shortly thereafter, Bjarne Stroustrup sought to enhance C by supporting object-oriented paradigms. He delved into the OO implementation of Smalltalk for ideas on implementation. However, he was unwilling to sacrifice performance, so he began working on “C with Classes” hoping that C++ code would have performance similar to (or better than) C code.
- In 1983, the language’s name was changed from “C with Classes” to C++. The ++ operator in C is used to increment variables, which gives insight into how Stroustrup envisioned the language. Many new features were added during this period, most notably virtual functions, function overloading, references with the & symbol, the const keyword, and single-line comments using two forward slashes.
- In 1985, Stroustrup published a book titled *”The C++ Programming Language”*. That same year, C++ was implemented as a commercial product. The language had not yet been formally standardized, making this book a very important reference. The language was updated again in 1989 to include protected members and static members, as well as inheritance from multiple classes.
- In 1990, the *”Annotated C++ Reference Manual”* was released. That same year, Borland’s Turbo C++ compiler was released as a commercial product. Turbo C++ added many other libraries that would significantly impact C++ development. Although the last stable version of Turbo C++ was in 2006, the compiler is still widely used.
- In 1998, the C++ standards committee released the first C++ ISO/IEC 14882:1998 international standard, informally known as C++ 98. It is said that the *”Annotated C++ Reference Manual”* had a significant influence on the standard’s formulation. The standard template library, which began conceptual development in 1979, was also included. In 2003, the committee responded to several issues reported with the 1998 standard and revised it accordingly. The modified language is referred to as C++ 03.
- In 2005, the C++ standards committee released a technical report (known as TR1) detailing various features they planned to add to the latest C++ standard. The new standard was informally referred to as C++ 0x, as it was expected to be released sometime before the end of the first decade. Ironically, the new standard would not be released until mid-2011. By that time, several technical reports had been published, and some compilers had begun to add experimental support for the new features.
- In mid-2011, the new C++ standard (known as C++ 11) was completed. The Boost library project had a significant impact on the new standard, with some new modules coming directly from the corresponding Boost libraries. New features included support for regular expressions, a comprehensive random number library, a new C++ time library, atomic support, a standard thread library, a new for loop syntax similar to foreach loops in some other languages, the auto keyword, new container classes, better support for union and array initialization lists, and variadic templates.
- In 2014, C++ 14 (also known as C++ 1y) was released as a minor extension of C++ 11, mainly for bug fixes and minor improvements. The international standard voting procedure draft was completed in August 2014, enhancing lambda functions, constexpr, and type deduction features.
- In 2017, the C17 standard was released, providing many enhancements to the core language and libraries.
-
In 2020, the C++20 standard was released, introducing many heavyweight features, some of which are:
-
Concepts: Concepts change the way we think about and program templates. They are semantic categories of template parameters. They allow you to express your intentions directly in the type system. If something goes wrong, you receive clear error messages.
-
Ranges library: The new ranges library allows algorithms to be executed directly on containers, composing algorithms with pipe syntax and applying them to infinite data streams.
-
Coroutines: With coroutines, asynchronous programming in C++ becomes mainstream. Coroutines are the foundation for cooperative tasks, event loops, infinite data streams, or pipes.
-
Modules: Modules overcome the limitations of header files. The separation of header and source files has become as outdated as the preprocessor. Finally, we have faster build times and easier methods for building software packages.
- Concurrency: Atomic Smart Pointers, Joining & Cancellable Threads, The C20 Synchronization Library enhance C++’s concurrency programming capabilities;

Interviews
Text Interviews: Stroustrup: Interviews

Video Interviews: Stroustrup: videos


Recommended Articles
-
C++ Reference Manual
-
10 C++11 Features Every C++ Developer Should Use
-
15 C++11 Features You Must Really Use in C++ Projects
-
How to Use Lambda Expressions in C++11
-
Deep Understanding of C++11
-
Thorough Compilation: New Features of C++11
-
C++11 New Features of auto and decltype Knowledge Points
-
C++11 New Features of Lvalue References, Rvalue References, Move Semantics, Perfect Forwarding
-
C++11 New Features of List Initialization
-
C++11 New Features std::function and Lambda Expressions
-
C++11 New Features of Template Improvements
-
C++11 New Features of Thread-Related Knowledge Points
-
C++11 New Features of Asynchronous Operations – async
-
C++11 New Features of Smart Pointers
-
C++11 Common New Features (1)
-
C++11 Common New Features (2)
-
Overview: New Features of C++17
- C++ 20 Language Features

Recommended Books
- Beginner
“C++ Primer” (5th Edition)“Accelerated C++” (A classic textbook from Stanford University)“The C++ Programming Language” (Written by Bjarne Stroustrup, the father of C++)
- Intermediate
“Effective C++”
“The Programmer’s Self-Improvement” & “CSAPP”
“Google C++ Style Guide”“Effective Modern C++”“More Effective C++”“Effective STL”“C++ Standard Library”“C++ Concurrency in Action”“Linux Multi-threaded Server Programming”
- Advanced
“C++ Meditations”“Deep Exploration of the C++ Object Model”
“C++ Design and Evolution”

Classic Open Source Projects
(This part has been fully packaged into the resource package)
-
Libevent
libev is an open-source event-driven library based on epoll, kqueue, and other OS-provided infrastructure. It is known for its efficiency, unifying IO events, timers, and signals under a single event handling framework. Based on the Reactor pattern, it is efficient and has concise code (over 8000 lines in version 4.15), making it a great resource for learning event-driven programming.
-
Memcached
Memcached is a high-performance distributed memory object caching system for dynamic web applications to alleviate database load. It reduces the number of times the database is read by caching data and objects in memory, thus speeding up dynamic database-driven websites. Memcached is based on a hashmap that stores key/value pairs. The code volume of Memcached-1.4.7 is acceptable, around 10K lines.
-
Redis
Redis is an open-source key-value database written in C. It supports more operations and data types than Memcached and is mainly used for caching, supporting master-slave synchronization. Learning Redis can refer to <>.
-
Webbench
Webbench is a very simple website stress testing tool used under Linux. It uses fork() to simulate multiple clients accessing the URL we set, testing the website’s performance under pressure, and can simulate up to 30,000 concurrent connections to test the website’s load capacity. Webbench is written in C, and its code is very concise, totaling less than 600 lines.
-
APR (Apache Portable Runtime)
This is a C open-source library maintained by the Apache community, mainly providing operating system-related functions (file system, processes, threads, users, IPC). It also provides some networking-related functions.
APR was originally part of the Apache web server, later becoming a standalone open-source project.
-
NGINX
Nginx is a high-performance HTTP and reverse proxy server developed by Russian software engineer Igor Sysoev, with IMAP/POP3 and SMTP server functions. The biggest feature of Nginx is its support for high concurrency and efficient load balancing, making it a great alternative to the Apache server in high-concurrency scenarios. Currently, well-known websites like Sina and Tencent have started using Nginx as their web application server.
-
Tinyhttpd
Tinyhttpd is an ultra-lightweight HTTP server developed in C, with all code totaling only 502 lines (including comments), accompanied by a simple client that can help understand the essence of an HTTP server by reading this code.
-
cJSON
cJSON is a JSON encoder/decoder in C, very lightweight, with the C file only having over 500 lines, and speed is also very ideal.cJSON also has some weaknesses; although its functionality is not very powerful, its small size and speed are its most commendable aspects. Its code is well-maintained, and the structure is simple and easy to understand, making it a very good C language project for learning.
-
CMockery
Cmockery is a lightweight framework for C unit testing released by Google. It is compact, has no dependencies on other open-source packages, and has low invasiveness to the code being tested. The source code of cmockery is less than 3K lines; just reading will_return and mock’s source code will make it clear.
Main Features:
Free and open-source, with technical support from Google;
A lightweight framework, making testing faster and simpler;
Avoids using complex compiler features, ensuring good compatibility with older compilers;
It does not require the code to be tested to depend on the C99 standard, which is useful for many embedded systems development.
-
Lua
Lua is great. It was invented by Brazilians, which irritates me, but not enough to make me blush, at most green with envy.
What makes me blush is the source code of Lua, which is 100% ANSI C, without any clutter. It can be easily compiled on any platform that supports ANSI C compilers. I have tried it; there is absolutely no nonsense. The code size of Lua is small enough, with version 5.1.4 having only 15,000 lines; removing blank lines and comments probably brings it down to 10,000 lines.
-
SQLite
SQLite is an open-source embedded relational database that implements a self-contained, zero-configuration, transactional SQL database engine. Its features include high portability, ease of use, compact structure, efficiency, and reliability. It is small enough, roughly 30,000 lines of C code, 250K.
-
UNIX v6
The kernel source code of UNIX V6, including device drivers, has about 10,000 lines. This amount of source code is understandable for beginners. There is a saying that the maximum amount of code a person can understand is 10,000 lines, and the kernel source code of UNIX V6 fits perfectly within this range. Seeing this, doesn’t everyone have the thought that “if there are only 10,000 lines, maybe I can learn it too”?
On the other hand, recent operating systems, such as the latest version of the Linux kernel, are said to exceed 10 million lines of code. Even for experienced developers, fully understanding all the code is basically impossible.
-
NETBSD
NetBSD is a free, highly portable UNIX-like operating system, the most portable platform currently available, capable of running on many platforms, from 64-bit alpha servers to handheld devices and embedded systems. The motto of the NetBSD project is: “Of course it runs NetBSD”. It is designed to be simple, with standardized code and many advanced features, making it well-regarded in both industry and academia. Due to its simple design and advanced features, it performs excellently in both production and research, and it also has a complete source code supported by users. Many programs can easily be obtained through the NetBSD Packages Collection.
- LevelDb
LevelDb is an open-source project initiated by two Google engineers. In short, LevelDb is a C++ library that can handle persistent storage of key-value data at the billion scale.It is a persistent storage KV system, unlike memory-based KV systems like Redis, LevelDb does not consume memory as wildly as Redis but stores most of the data on disk.
Additionally, LevelDb stores data in an ordered manner based on the key values of the records, meaning that adjacent key values are stored sequentially in the storage file, and the application can customize the key size comparison function, with LevelDb storing these records in order according to the user-defined comparison function.
-
Boost.Asio
It is the core of asynchronous input/output. The name itself says it all: Asio means asynchronous input/output. This library allows C++ to handle data asynchronously and is platform-independent. Asynchronous data handling means that tasks do not need to wait for completion. Instead, Boost.Asio triggers an application when tasks are completed. The main advantage of asynchronous tasks is that applications do not need to block while waiting for tasks to complete but can perform other tasks in the meantime.
A typical example of asynchronous tasks is network applications. If data is sent out, such as to the Internet, it usually requires knowing whether the data was sent successfully. Without a library like Boost.Asio, you would need to evaluate the return value of the function. However, this requires waiting until all data is sent and receiving a confirmation or error code. Using Boost.Asio, this process is divided into two separate steps: the first step starts the data transmission as an asynchronous task. Once the transmission is complete, whether successful or erroneous, the application will be notified of the corresponding result in the second step. The main difference is that the application does not need to block until the transmission is complete, but can perform other operations during this time.
-
SGI STL
SGI STL is a classic implementation of STL code. Although many compilers do not directly use this version, many improve upon it. For example, the standard library of GNU C++ is improved upon this basis. This code also has the benefit of comments; the code is written very standardly, and it is not difficult to understand if you spend some time reading it.
-
Muduo
Muduo is a modern C++ network library based on the Reactor pattern, using a non-blocking IO model, event-driven and callback-based, natively supporting multi-core and multi-threading, suitable for writing multi-threaded network applications for Linux servers.

Other Resources
-
C++ Standard Library – A collection of classes and functions written using the core language, and part of the C++ ISO standard itself
-
Standard Template Library – Standard Template Library
-
C POSIX library – C standard library specification for POSIX systems
-
ISO C++ Standards Committee – C++ Standards Committee
-
C++ FAQ – Common questions about C++
-
Free Country – Free Country provides free C++ source code and C++ libraries covering various programming areas such as compression, archiving, game programming, standard template library, and GUI programming.
-
C and C++ Users Group – A user group for C and C++ providing free source code projects covering various programming fields including AI, animation, compilers, databases, debugging, encryption, games, graphics, GUI, language tools, system programming, etc.
-
LearnCpp – Free learning C++ programming
-
CodeCogs – CodeCogs is a collaborative open-source library for numerical components in C/C++
-
codeproject – C/C++ resource code projects provided by codeproject
-
thoughtco – Game-related C++ source code
-
Free C/C++ Libraries – Free C++ source code and other useful tools
-
The C++ Standard Library – A webpage that collects links to various C/C++ websites
-
cplusplus – C++ learning website
- C++ Source Codes – A comprehensive list of 345 source codes related to C++
ABOUT
About Us
Deep Blue Academy is an online education platform focused on artificial intelligence, with tens of thousands of partners learning on the platform, many of whom come from well-known domestic and foreign universities, such as Tsinghua University and Peking University.