Zum Hauptinhalt springen
Bethemesh
BiografieGeschichte der Informatik

Bjarne Stroustrup: designing C++ without giving up performance

How Bjarne Stroustrup evolved C with Classes into C++, balancing abstraction, compatibility, and control over resources.

Veröffentlicht 10. August 2026Lesezeit : 5 minVon Bethemesh Team
Anfänger
Portrait of Bjarne Stroustrup, designer of C++
Inhalt anzeigen
  1. The problem of large, efficient programs
  2. From C with Classes to C++
  3. Abstraction without imposed cost
  4. From classes to a multiparadigm library
  5. Standardizing a living language
  6. What C++ enables—and demands
  7. Why Bjarne Stroustrup still matters
  8. Timeline
  9. Frequently asked questions
  10. Did Bjarne Stroustrup create C++ alone?
  11. Why is it called C++?
  12. Is C++ only object-oriented?
  13. Is C++ compatible with C?
  14. Why is C++ difficult to learn?
  15. Where is C++ still relevant?

Bjarne Stroustrup did not design C++ to replace C with a more elegant theory. He wanted a tool capable of describing large systems without surrendering control of performance, memory, or hardware.

That tension has defined C++ from the beginning: provide high-level abstractions while remaining usable wherever every resource matters. It explains the language’s longevity and power, but also its reputation for complexity.

The problem of large, efficient programs

Bjarne Stroustrup was born in Aarhus, Denmark, in 1950. He studied mathematics and computer science at Aarhus University, then completed a doctorate at Cambridge on distributed systems.

During that work, he used Simula, a pioneering language for classes and object-oriented programming. Its abstractions helped represent system components, but the available tools did not deliver the required performance. For another experiment he used BCPL, which was closer to the machine, but the loss of abstraction made the program difficult to organize.

The experience suggested a direction: combine Simula’s structuring mechanisms with C’s compilation model and efficiency.

From C with Classes to C++

Stroustrup joined Bell Labs in 1979 and began C with Classes, adding classes, constructors, destructors, access control, and stronger type checking to C. Early versions were translated into C by a preprocessor called Cfront and then compiled with existing tools.

Extending C was pragmatic. Bell Labs already had systems, libraries, and trained programmers. Compatibility encouraged experiments and adoption. It also passed difficult traits to C++: dense syntax, implicit conversions, and direct memory management.

In 1983, the language became C++, referring to C’s increment operator. Virtual functions enabled dynamic polymorphism, while operator overloading let user-defined types behave like built-in ones. The first edition of The C++ Programming Language appeared in 1985.

Abstraction without imposed cost

Stroustrup’s central idea was not that every program should be object-oriented. C++ gradually became multiparadigm: procedural programming, classes, generic programming, functions, and compile-time computation can coexist.

The “zero-overhead abstraction” principle has two parts. Unused features should cost no time or memory. When an abstraction is used, its implementation should be able to compete with specialized handwritten code. This is not an automatic guarantee—a poor design can still be slow—but a goal that lets libraries offer efficient abstractions.

Templates embody the idea. An algorithm can be written for a family of types, and the compiler generates the necessary versions. The Standard Template Library joins containers, iterators, and algorithms without requiring one common class hierarchy.

C++ also offers deterministic resource management. An object acquires a resource in its constructor and releases it in its destructor. This pattern, RAII, covers not only memory but files, locks, and connections. Modern smart pointers make the model safer while retaining low-level control.

From classes to a multiparadigm library

A language becomes useful at scale when abstractions can be shared as libraries. Early C++ classes mainly represented objects and protected state. Templates expanded the goal to families of algorithms and data structures without fixing their element type.

Alexander Stepanov and Meng Lee’s work on the Standard Template Library was decisive. The STL is not an object hierarchy. It separates containers, algorithms, and iterators, which connect them. One sorting algorithm can operate on several data representations without depending on a shared base class.

Its integration into the standard library in the 1990s confirmed that C++ was no longer simply “C with classes.” Generic programming became a major axis. Later, concepts expressed requirements on template parameters explicitly, improving interfaces and compiler diagnostics.

This reflects Stroustrup’s approach: do not impose one paradigm; let developers select an abstraction and let the compiler remove as much runtime cost as possible.

Standardizing a living language

As compilers multiplied, a shared definition became essential. The first ISO C++ standard appeared in 1998. Standardization made the language a collective work: Stroustrup retained influence, but an international committee debated and voted on changes.

C++11 was a major modernization, adding move semantics, lambdas, concurrency tools, and extensive library improvements. Later editions adopted a regular rhythm and introduced concepts, modules, ranges, and coroutines.

Accumulation answers real needs but imposes a teaching cost. Historical styles coexist, and code valid under old practice may no longer represent the safest modern C++. Compatibility protects major investments, while limiting the possibility of starting again from a blank page.

What C++ enables—and demands

C++ is used where performance, latency, or hardware access matter: game engines, browsers, databases, creation tools, embedded systems, and financial infrastructure. It allows rich abstractions without forbidding precise control of data representation.

That freedom transfers responsibility to the programmer. Invalid memory access, undefined behavior, and lifetime errors remain possible. Modern guidance favors containers, resource-owning objects, static analysis, and established libraries over routine use of raw pointers.

Comparing C++ with Java or Python is therefore less about choosing a winner than comparing contracts. Java delegates more decisions to a virtual machine; Python emphasizes an immediate development loop; C++ exposes costs and representation choices more directly.

Why Bjarne Stroustrup still matters

Stroustrup showed that abstraction need not be the enemy of efficiency. The idea influences C++ and newer languages that likewise seek to make guarantees and costs visible.

His legacy includes a less comfortable lesson: a language used for decades becomes social infrastructure as well as technology. Evolving it requires balancing innovation, safety, tooling, education, and billions of existing lines.

Timeline

  • 1950: Bjarne Stroustrup is born in Aarhus, Denmark.
  • 1975: He graduates from Aarhus University.
  • 1979: He earns a Cambridge doctorate and joins Bell Labs.
  • 1979: Work begins on C with Classes.
  • 1983: The name C++ is adopted.
  • 1985: The first The C++ Programming Language is published.
  • 1989: C++ 2.0 is released.
  • 1990: The Annotated C++ Reference Manual appears.
  • 1998: The first international C++ standard is published.
  • 2011: C++11 marks a major stage in modern C++.
  • 2014–2023: Standards continue on an approximately three-year cycle.
  • Today: Stroustrup continues work on C++ design, teaching, and safety.

Frequently asked questions

Did Bjarne Stroustrup create C++ alone?

He initiated and led its early design. C++ later became the product of compiler and library teams, users, and an international ISO committee.

Why is it called C++?

In C, ++ increments a value. The name suggests an “incremented” C without claiming to be C’s official next version.

Is C++ only object-oriented?

No. It supports procedural, object-oriented, generic, and functional styles. Stroustrup describes it as multiparadigm.

Is C++ compatible with C?

Much C code can be adapted or compiled as C++, but compatibility is not complete. Each language has its own standard and some constructs differ.

Why is C++ difficult to learn?

It combines paradigms, preserves historical choices, and offers extensive control. Learning should begin with modern practices rather than systematic manual memory management.

Where is C++ still relevant?

In software where performance, latency, memory footprint, or hardware integration are decisive: games, browsers, databases, scientific computing, embedded systems, and infrastructure.

Quellen und Referenzen

  1. 1.Bjarne Stroustrup --- A History of C++: 1979--1991
  2. 2.Bjarne Stroustrup --- The Design and Evolution of C++
  3. 3.ISO C++ Foundation --- The C++ Standard
  4. 4.Computer History Museum --- Bjarne Stroustrup oral history

Sammlung

Programmiersprachen

  1. 01Grace Hopper: from early compilers to COBOL
  2. 02John Backus: FORTRAN, BNF, and the rejection of machine code
  3. 03Dennis Ritchie: the C language at the heart of Unix
  4. 04FORTRAN: proving that a compiler could compete with assembly
  5. 05The C language: making systems portable without hiding the machine
  6. 06Niklaus Wirth: from Pascal to Oberon, designing through simplicity
  7. 07Bjarne Stroustrup: designing C++ without giving up performance
  8. 08Pascal: learning to program by making structure visible
  9. 09C++: from C with Classes to a general-purpose language
  10. 10Object-oriented programming: objects, messages, and reusable abstractions
  11. 11Guido van Rossum: creating Python to make code readable
  12. 12Brendan Eich: JavaScript, from Netscape prototype to Web standard
  13. 13James Gosling: the engineer behind Java
  14. 14Python: readability, batteries included, and a global ecosystem
  15. 15Java: write once, run anywhere
  16. 16JavaScript: the language that made the Web interactive
  17. 17Ken Thompson: from Unix to Go, simplicity as a method
  18. 18John McCarthy: Lisp and the idea of programming with symbols
  19. 19Alan Kay: Smalltalk and the computer as a personal medium
  20. 20Barbara Liskov: the abstraction that made software modular
  21. 21Robin Milner: ML, machine-assisted proof, and languages of interaction
  22. 22Brian Kernighan: AWK, Unix, and the art of explaining code
  23. 23Anders Hejlsberg: from Turbo Pascal to C# and TypeScript
  24. 24Larry Wall: Perl, the language that connected the tools of the Internet
  25. 25Yukihiro Matsumoto: Ruby and programmer happiness
  26. 26Rasmus Lerdorf: PHP and the democratization of the dynamic Web

War dieser Artikel hilfreich?