C++ was released commercially in 1985, but its story starts in 1979 at Bell Labs in Murray Hill, New Jersey. How Bjarne Stroustrup turned C with Classes into C++ is a lesson in incremental design: rather than invent a new language from scratch, he added the abstraction tools he had admired in Simula to C, a language that was already fast, portable and close to the hardware.
How Bjarne Stroustrup turned C with Classes into C++
During his PhD work at Cambridge, Stroustrup had used Simula to simulate distributed systems. He loved its classes, which made the program's structure match the problem, but the implementation was too slow for real work. When he rewrote the program in BCPL it ran fast, but was painful to write. At Bell Labs he faced similar problems analysing the Unix kernel, and he decided to get the best of both.
In 1979 he began C with Classes, implemented by a preprocessor called Cpre that translated it into C. It added classes, derived classes, access control, constructors and destructors. In 1983 the language was renamed C++, a name suggested by Rick Mascitti that plays on C's increment operator. It gained virtual functions, function and operator overloading, references and const.
In October 1985 Bell Labs released Cfront 1.0, a compiler that translated C++ into C, and Stroustrup published the first edition of The C++ Programming Language. Since Cfront output C, C++ could run anywhere a C compiler existed, which helped it spread fast.
Standards timeline
Release 2.0 in 1989 added multiple inheritance and abstract classes. Templates and exceptions followed, and in 1990 Margaret Ellis and Stroustrup published the Annotated C++ Reference Manual, the basis for standardisation.
| Standard | Highlights |
|---|---|
| C++98 | First ISO standard; includes the Standard Template Library |
| C++03 | Bug-fix revision |
| C++11 | auto, lambdas, move semantics, smart pointers, threads |
| C++14 / C++17 | Generic lambdas, std::optional, std::variant, structured bindings |
| C++20 | Concepts, modules, coroutines, ranges |
| C++23 | std::expected, std::print, deducing this |
| C++26 | Static reflection, contracts, std::execution |
The STL, designed mainly by Alexander Stepanov with Meng Lee, was accepted into the draft standard in 1994. Its containers, iterators and algorithms showed what templates could do and shaped generic programming in every language that followed.
Design principles and key features
- Zero-overhead abstraction: what you do not use, you do not pay for, and what you use could not be hand-coded much better.
- RAII (Resource Acquisition Is Initialization): destructors release memory, files and locks deterministically.
- Classes and inheritance, with virtual functions for runtime polymorphism.
- Templates for compile-time generic programming, now constrained by concepts.
- Compatibility with C, so decades of C code and libraries remain usable.
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
template <typename T>
T largest(const std::vector<T>& items) {
return *std::max_element(items.begin(), items.end());
}
int main() {
std::vector<int> scores{42, 7, 19, 88, 3};
std::vector<std::string> names{"Simula", "C", "Ada"};
std::cout << largest(scores) << '\n'; // 88
std::cout << largest(names) << '\n'; // Simula
}
One template works for integers and strings, and the vectors free their memory automatically when main returns. No new or delete appears anywhere, which is how modern C++ is meant to look.
Where C++ is used
C++ runs a remarkable share of the software people touch daily: the Chrome and Firefox browsers, much of Windows and Microsoft Office, Adobe's creative applications, the Unreal Engine and most AAA game engines, the LLVM and GCC compilers, MySQL and MongoDB, and the low-latency trading systems of financial firms. It is also widespread in embedded systems, robotics, automotive software and scientific computing.
Influence, criticism and legacy
Java and C# borrowed C++'s syntax while dropping manual memory management. D, Rust and Carbon are, in different ways, attempts to keep C++'s performance with fewer hazards. The language's main criticism is memory safety: in 2024 the US government's Office of the National Cyber Director urged a move to memory-safe languages. The committee's response includes safety profiles, hardened library modes and the contracts feature in C++26.
Is C++ still used today?
Very much. It consistently ranks among the most-used languages, three major compilers (GCC, Clang and MSVC) track the standard closely, and new revisions arrive every three years. Seeing how Bjarne Stroustrup turned C with Classes into C++, one practical addition at a time, explains why the language is large and sometimes messy, and also why so much performance-critical software still depends on it.
Frequently asked questions
Why is it called C++ instead of C with Classes?
The name C++ was suggested by Rick Mascitti in 1983. In C, ++ is the increment operator, so C++ suggests "the next step after C". Stroustrup preferred it to "new C" or other options because it kept the link to C while hinting at evolution.
What was Cfront and why did it matter?
Cfront was the original C++ compiler from Bell Labs, released as version 1.0 in 1985. It translated C++ into C, which was then compiled by the platform's native C compiler. That made C++ portable to nearly any system from day one.
Which C++ version should a beginner learn today?
Start with modern C++, meaning C++17 or C++20 and later. These versions let you write safer, clearer code with smart pointers, standard containers, ranges and auto. Older tutorials that rely on raw new and delete teach habits that current guidelines discourage.







