History of C++
C++ has been evolving for over 45 years, and understanding its timeline helps explain why the language looks the way it does today — including why you’ll see very different styles of C++ code in the wild, from raw-pointer-heavy legacy code to modern, safety-first idioms.
“C with Classes” (1979–1983)
In 1979, Bjarne Stroustrup was working at Bell Labs on his PhD research into distributed systems. He wanted the low-level efficiency of C combined with the class-based, object-oriented structuring he had seen in Simula, a language designed for simulation. Existing languages forced a trade-off: fast but unstructured, or structured but slow. Stroustrup’s answer was to extend C itself, adding classes, basic inheritance, inline functions, default function arguments, and stronger type checking. He called this extended language “C with Classes.”
The name “C++” (1983)
ISO standardization timeline
Since 1998, C++ has been governed by the ISO/IEC 14882 standard, with a new revision expected roughly every three years. Each standard is commonly referred to by its year.
Standard | Year | Highlights |
|---|---|---|
C++98 | 1998 | First ISO standard. Templates, the STL (vectors, maps, algorithms), exceptions formalized. |
C++03 | 2003 | Minor bug-fix revision to C++98 — no major new language features. |
C++11 | 2011 | "Modern C++" begins. auto, lambda expressions, smart pointers, move semantics, range-based for, nullptr, threading library. |
C++14 | 2014 | Small refinements to C++11 — generic lambdas, relaxed constexpr, binary literals. |
C++17 | 2017 | std::optional, std::variant, structured bindings, if with initializers, parallel algorithms. |
C++20 | 2020 | Concepts, ranges, coroutines, modules, three-way comparison (spaceship operator). |
C++23 | 2023 | std::expected, deducing this, more ranges/library refinements, module ecosystem maturing. |
What “modern C++” actually means
C++11 is widely treated as a dividing line. It’s not just that new keywords were added — it represents a genuine shift in how idiomatic C++ is written.
Smart pointers (
std::unique_ptr,std::shared_ptr) replaced most manualnew/deletecalls, dramatically cutting down on memory leaks.RAII (Resource Acquisition Is Initialization) became the default way to manage resources — files, locks, memory — tying their lifetime to object scope.
autofor type inference reduced verbose, repetitive type declarations, especially with templates and iterators.Range-based for loops and, later, the ranges library made iterating over containers shorter and less error-prone than manual index or iterator loops.
Move semantics let objects transfer ownership of resources instead of expensively copying them, a change felt throughout the entire standard library.
Where C++ is headed
The C++ standards committee continues to prioritize backward compatibility while pushing toward greater safety and expressiveness — modules to replace slow header-based compilation, contracts for runtime assertions, and continued growth of the ranges and coroutines libraries are all active areas of work heading into future standards.