CppHistory of C++

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)
By 1983, the language had grown well beyond its original scope — gaining virtual functions, function and operator overloading, references, and stronger type checking. It was renamed C++, a pun coined by Rick Mascitti: ++ is C’s increment operator, so the name literally means “one more than C.” The first commercial release of the Cfront compiler shipped in 1985, the same year Stroustrup published The C++ Programming Language, which became the language’s de facto reference for years before any official standard existed.
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 manual new/delete calls, 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.

  • auto for 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.

You don't need to know every standard
As a beginner, focus on C++17 or C++20 idioms — they represent how C++ is written today. You’ll encounter older C++98-style code in legacy projects, but you don’t need to write that way yourself.