Zum Hauptinhalt springen
BiografieGeschichte der InformatikAnfänger

Bjarne Stroustrup: C++ entwerfen, ohne auf Leistung zu verzichten

Wie Bjarne Stroustrup C with Classes zu C++ weiterentwickelte, einer Sprache, die Abstraktion, Kompatibilität und Ressourcenkontrolle verbindet.

Veröffentlicht 10. August 2026Lesezeit : 6 minVon Yann Bastien
Porträt von Bjarne Stroustrup, dem Schöpfer der Programmiersprache C++
Inhalt anzeigen
  1. Das Problem großer, effizienter Programme
  2. Von „C with Classes“ zu C++
  3. Abstraktion ohne aufgezwungene Kosten
  4. Von der Bibliothek zur Multiparadigmensprache
  5. Eine lebende Sprache standardisieren
  6. Was C++ ermöglicht — und verlangt
  7. Warum Bjarne Stroustrup bis heute wichtig ist
  8. Chronologie
  9. Häufig gestellte Fragen
  10. Hat Bjarne Stroustrup C++ allein entwickelt?
  11. Warum heißt die Sprache C++?
  12. Ist C++ nur eine objektorientierte Sprache?
  13. Ist C++ mit C kompatibel?
  14. Warum ist C++ schwer zu lernen?
  15. Wo bleibt C++ relevant?

Bjarne Stroustrup entwickelte C++ nicht, um C durch eine elegantere Theorie zu ersetzen. Er suchte ein Werkzeug, mit dem sich große Systeme beschreiben ließen, ohne die Kontrolle über Leistung, Speicher und Hardware zu verlieren.

Diese Spannung prägt C++ seit seinen Anfängen: Abstraktionen auf hohem Niveau anbieten und zugleich dort einsetzbar bleiben, wo jede Ressource zählt. Sie erklärt gleichermaßen die Langlebigkeit und Leistungsfähigkeit der Sprache wie ihren Ruf, komplex zu sein.

Das Problem großer, effizienter Programme

Bjarne Stroustrup wurde 1950 im dänischen Aarhus geboren. Er studierte Mathematik und Informatik an der Universität Aarhus und promovierte anschließend in Cambridge über verteilte Systeme.

Während dieser Arbeit nutzte er Simula, eine Pioniersprache für Klassen und objektorientierte Programmierung. Die Abstraktionen von Simula halfen ihm, Komponenten eines Systems darzustellen, doch die verfügbaren Werkzeuge lieferten nicht die erwartete Leistung. Für ein weiteres Experiment wechselte er zu BCPL, das näher an der Maschine lag, stellte aber fest, dass der Verlust an Abstraktion die Organisation des Programms erschwerte.

Daraus entstand seine Richtung: die Strukturierungsmechanismen von Simula mit dem Kompilierungsmodell und der Effizienz von C zu verbinden.

Von „C with Classes“ zu C++

Stroustrup kam 1979 zu den Bell Labs. Dort begann er mit C with Classes, einer Erweiterung von C um Klassen, Konstruktoren, Destruktoren, Zugriffskontrolle und strengere Typprüfung. Frühe Versionen wurden von einem Präprozessor namens Cfront in C übersetzt und anschließend mit vorhandenen Werkzeugen kompiliert.

C zu erweitern war eine pragmatische Entscheidung. In den Bell Labs gab es bereits Systeme, Bibliotheken und Entwickler mit C-Erfahrung. Die Kompatibilität erleichterte Experimente und Einführung. Sie übertrug jedoch auch Eigenschaften auf C++, die später schwer zu vereinfachen waren: dichte Syntax, implizite Konvertierungen und direkte Speicherverwaltung.

1983 erhielt die Sprache den Namen C++, eine Anspielung auf den Inkrementoperator von C. Virtuelle Funktionen ermöglichten dynamischen Polymorphismus, während Operatorüberladung benutzerdefinierte Typen ähnlich wie eingebaute Typen nutzbar machte. Die erste Ausgabe von The C++ Programming Language erschien 1985.

Abstraktion ohne aufgezwungene Kosten

Stroustrups zentrale Idee lautet nicht, dass jedes Programm objektorientiert sein müsse. C++ wurde schrittweise multiparadigmatisch: prozedurale Programmierung, Klassen, generische Programmierung, Funktionen und Berechnungen zur Übersetzungszeit können nebeneinander bestehen.

Sein Prinzip der „Zero-overhead abstractions“ lässt sich in zwei Regeln fassen. Nicht verwendete Funktionen sollen weder Zeit noch Speicher kosten. Wird eine Abstraktion eingesetzt, soll ihre Implementierung mit spezialisiertem handgeschriebenem Code konkurrieren können. Das ist keine automatische Leistungsgarantie: Ein schlechtes Design kann weiterhin langsam sein. Die Sprache soll vielmehr Bibliotheken ermöglichen, effiziente Abstraktionen anzubieten.

Templates veranschaulichen dieses Ziel. Sie erlauben, einen Algorithmus für eine Familie von Typen zu schreiben, wobei der Compiler die benötigten Varianten erzeugt. Die Standard Template Library verbindet Container, Iteratoren und Algorithmen, ohne eine gemeinsame Klassenhierarchie vorzuschreiben.

C++ entwickelte außerdem ein deterministisches Modell der Ressourcenverwaltung. Ein Objekt kann in seinem Konstruktor eine Ressource erwerben und sie im Destruktor freigeben. Diese als RAII bekannte Technik betrifft nicht nur Speicher: Dateien, Sperren und Verbindungen können an die Lebensdauer eines Objekts gebunden werden. Moderne Smart Pointer machen dieses Modell sicherer, ohne Low-Level-Kontrolle grundsätzlich auszuschließen.

Von der Bibliothek zur Multiparadigmensprache

Eine Sprache wird im großen Maßstab erst wirklich nutzbar, wenn ihre Abstraktionen in Bibliotheken geteilt werden können. In den Anfängen von C++ dienten Klassen vor allem dazu, Objekte darzustellen und ihren Zustand zu schützen. Templates erweiterten dieses Ziel: Sie beschreiben Familien von Algorithmen und Datenstrukturen, ohne den verarbeiteten Typ im Voraus festzulegen.

Die Arbeit von Alexander Stepanov und Meng Lee an der Standard Template Library war entscheidend. Die STL ist nicht als Objekthierarchie aufgebaut. Sie trennt Container, Algorithmen und Iteratoren, die als Schnittstelle zwischen beiden dienen. Derselbe Sortieralgorithmus kann dadurch mit unterschiedlichen Datenrepräsentationen arbeiten, ohne von einer gemeinsamen Basisklasse abzuhängen.

Die Aufnahme in die Standardbibliothek in den 1990er-Jahren bestätigte, dass C++ längst mehr als „C mit Klassen“ war. Generische Programmierung wurde zu einer tragenden Säule. Später sollten Concepts die Anforderungen an Template-Parameter explizit ausdrücken und damit Schnittstellen und Compilerfehler verständlicher machen.

Diese Entwicklung zeigt Stroustrups Arbeitsweise. Er will kein einziges Paradigma erzwingen, sondern Nutzern die passende Abstraktion wählen lassen und dem Compiler ermöglichen, deren Laufzeitkosten so weit wie möglich zu eliminieren.

Eine lebende Sprache standardisieren

Mit dem Auftreten mehrerer Compiler wurde eine gemeinsame Definition unverzichtbar. Der erste ISO-Standard für C++ erschien 1998. Durch die Standardisierung wurde die Sprache zu einem kollektiven Werk: Stroustrup behielt großen Einfluss, doch Weiterentwicklungen werden von einem internationalen Komitee diskutiert und beschlossen.

C++11 brachte eine umfassende Modernisierung mit Move-Semantik, Lambda-Ausdrücken, Werkzeugen für Nebenläufigkeit und zahlreichen Bibliotheksverbesserungen. Spätere Ausgaben folgten einem regelmäßigen Rhythmus und ergänzten unter anderem Concepts, Module, Ranges und Coroutinen.

Diese Erweiterungen beantworten reale Bedürfnisse, haben aber pädagogische Kosten. Mehrere historische Stile existieren nebeneinander, und Code, der nach älteren Praktiken korrekt ist, entspricht möglicherweise nicht mehr der sichersten modernen C++-Schreibweise. Kompatibilität schützt enorme Softwareinvestitionen, begrenzt aber die Möglichkeit eines vollständigen Neuanfangs.

Was C++ ermöglicht — und verlangt

C++ wird eingesetzt, wenn Leistung, Latenz oder Hardwarezugriff wichtig sind: Spiele-Engines, Browser, Datenbanken, Kreativwerkzeuge, eingebettete Systeme und Finanzinfrastrukturen. Die Sprache ermöglicht reichhaltige Abstraktionen, ohne präzise Kontrolle über die Darstellung von Daten zu verbieten.

Diese Freiheit überträgt große Verantwortung auf Entwickler. Ungültige Speicherzugriffe, undefiniertes Verhalten und Lebensdauerfehler bleiben möglich. Moderne Empfehlungen bevorzugen Container, Objekte mit klarer Ressourcenverantwortung, statische Prüfungen und erprobte Bibliotheken gegenüber systematischem Einsatz roher Zeiger.

C++ mit Java oder Python zu vergleichen bedeutet daher weniger, einen Sieger zu bestimmen, als unterschiedliche Verträge zu betrachten. Java überlässt einer virtuellen Maschine mehr Entscheidungen; Python priorisiert einen sehr direkten Entwicklungszyklus; C++ macht Kosten und Repräsentationsentscheidungen stärker sichtbar.

Warum Bjarne Stroustrup bis heute wichtig ist

Stroustrup zeigte, dass Abstraktion nicht zwangsläufig der Feind von Effizienz ist. Diese Idee beeinflusst C++ ebenso wie neuere Sprachen, die Garantien und Kosten ebenfalls sichtbar machen wollen.

Sein Erbe enthält auch eine unbequemere Lektion: Eine über Jahrzehnte eingesetzte Sprache wird zu sozialer ebenso wie technischer Infrastruktur. Ihre Weiterentwicklung muss Innovation, Sicherheit, Werkzeuge, Ausbildung und Milliarden bestehender Codezeilen miteinander vereinbaren.

Chronologie

  • 1950: Bjarne Stroustrup wird in Aarhus, Dänemark, geboren.
  • 1975: Abschluss an der Universität Aarhus.
  • 1979: Promotion in Cambridge und Eintritt in die Bell Labs.
  • 1979: Beginn der Arbeit an C with Classes.
  • 1983: Einführung des Namens C++.
  • 1985: Erste Ausgabe von The C++ Programming Language.
  • 1989: Veröffentlichung von C++ 2.0.
  • 1990: The Annotated C++ Reference Manual erscheint.
  • 1998: Erster internationaler C++-Standard.
  • 2011: Veröffentlichung von C++11 als wichtiger Schritt des modernen C++.
  • 2014–2023: Neue Standards in ungefähr dreijährigem Rhythmus.
  • Heute: Stroustrup arbeitet weiter an Design, Lehre und Sicherheit von C++.

Häufig gestellte Fragen

Hat Bjarne Stroustrup C++ allein entwickelt?

Er initiierte und leitete den ursprünglichen Entwurf. Später wurde die Sprache zum Produkt von Compilern, Bibliotheken, Anwendern und einem internationalen ISO-Komitee.

Warum heißt die Sprache C++?

In C erhöht der Operator ++ einen Wert. Der Name deutet daher ein „erweitertes“ C an, ohne zu behaupten, es handle sich lediglich um die nächste offizielle Version von C.

Ist C++ nur eine objektorientierte Sprache?

Nein. Sie unterstützt prozedurale, objektorientierte, generische und funktionale Stile. Stroustrup beschreibt sie als Multiparadigmensprache.

Ist C++ mit C kompatibel?

Viel C-Code kann angepasst oder als C++ kompiliert werden, doch die Sprachen sind nicht vollständig kompatibel. Beide besitzen eigene Standards, und manche Konstruktionen sind nur in einer der beiden gültig.

Warum ist C++ schwer zu lernen?

Die Sprache verbindet mehrere Paradigmen, bewahrt viele historische Entscheidungen und gibt Entwicklern weitreichende Kontrolle. Beim Lernen ist es sinnvoll, mit modernen Praktiken statt mit systematischer manueller Speicherverwaltung zu beginnen.

Wo bleibt C++ relevant?

In Software, bei der Leistung, Latenz, Speicherbedarf oder Hardwareintegration entscheidend sind: Spiele, Browser, Datenbanken, wissenschaftliches Rechnen, eingebettete Systeme und Infrastruktur.

War dieser Artikel hilfreich?

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

7 / 26

  1. 01Grace Hopper: von frühen Compilern zu COBOL
  2. 02John Backus: FORTRAN, BNF und die Abkehr vom Maschinencode
  3. 03Dennis Ritchie: die Sprache C im Herzen von Unix
  4. 04FORTRAN: der Beweis, dass ein Compiler mit Assembler konkurrieren kann
  5. 05Die Sprache C: Systeme portabel machen, ohne die Maschine zu verbergen
  6. 06Niklaus Wirth: von Pascal bis Oberon – Entwurf durch Einfachheit
  7. 07Bjarne Stroustrup: C++ entwerfen, ohne auf Leistung zu verzichten
  8. 08Pascal: Programmieren lernen, indem Struktur sichtbar wird
  9. 09C++: von C with Classes zum modernen C++
  10. 10Objektorientierte Programmierung: Objekte, Nachrichten und wiederverwendbare Abstraktionen
  11. 11Guido van Rossum: Python für lesbaren Code entwickeln
  12. 12Brendan Eich: JavaScript vom Netscape-Prototyp zum Webstandard
  13. 13James Gosling: der Ingenieur hinter Java
  14. 14Python: Lesbarkeit, Batteries included und ein globales Ökosystem
  15. 15Java: einmal schreiben, überall ausführen
  16. 16JavaScript: die Sprache, die das Web interaktiv machte
  17. 17Ken Thompson: von Unix bis Go, Einfachheit als Methode
  18. 18John McCarthy: Lisp und die Idee, mit Symbolen zu programmieren
  19. 19Alan Kay: Smalltalk und der Computer als persönliches Medium
  20. 20Barbara Liskov: Abstraktion als Grundlage modularer Software
  21. 21Robin Milner: ML, rechnergestützte Beweise und Sprachen der Interaktion
  22. 22Brian Kernighan: AWK, Unix und die Kunst, Code zu erklären
  23. 23Anders Hejlsberg: von Turbo Pascal zu C# und TypeScript
  24. 24Larry Wall: Perl, die Sprache, die die Werkzeuge des Internets verband
  25. 25Yukihiro Matsumoto: Ruby und das Glück der Programmierenden
  26. 26Rasmus Lerdorf: PHP und die Demokratisierung des dynamischen Webs
GeschichteGeschichte der InformatikAnfänger

C++: von C with Classes zum modernen C++

Von C with Classes bis zu modernen Standards: Wie C++ Abstraktion, generische Programmierung, Kompatibilität und Leistungskontrolle miteinander verbindet.

10. August 20269 min