Zum Inhalt springen

Linda Crutchfield und C++: Unterschied zwischen den Seiten

aus Wikipedia, der freien Enzyklopädie
(Unterschied zwischen Seiten)
Inhalt gelöscht Inhalt hinzugefügt
Blaufisch (Diskussion | Beiträge)
KKeine Bearbeitungszusammenfassung
 
Amin K (Diskussion | Beiträge)
 
Zeile 1: Zeile 1:
{{Infobox_Programmiersprache|
'''Linda Crutchfield''' (* [[3. April]] [[1942]] in [[Shawinigan]]) ist eine ehemalige [[Kanada|kanadische]] Skirennläuferin, Rennrodlerin und Wasserskiläuferin. Im Lauf ihrer sportlichen Karriere gewann sie in verschiedenen Sportarten insgesamt 18 kanadische Landesmeistertitel.
Name=C++
|Logo=
|Beschreibung=
|Paradigma= [[Generische Programmierung|generisch]], [[Objektorientierung|objektorientiert]], [[Prozedurale Programmierung|prozedural]]
|Erscheinungsjahr = 1985, letzte Überarbeitung 2003
|Entwickler= [[Bjarne Stroustrup]]
|Typisierung = statisch, stark
|Implementierung= [[GNU Compiler Collection]], [[Microsoft Visual C++]], [[C++Builder|Borland C++ Builder]]
|Beeinflusst_von= [[C (Programmiersprache)|C]], [[Simula]], [[Ada (Programmiersprache)|Ada 83]], [[CLU]]
|Beeinflusste = [[Ada (Programmiersprache)|Ada 95]], [[C-Sharp]], [[Java (Programmiersprache)|Java]], [[PHP]]
}}


'''C++''' ist eine der verbreitetsten und industriell bedeutendsten [[Programmiersprache]]n. Sie ist als Mehrzwecksprache konzipiert und unterstützt insbesondere [[Effizienz|effiziente]] und maschinennahe Programmierung, [[abstrakter Datentyp|Datenabstraktion]] sowie [[objektorientierte Programmierung|objektorientierte]] und [[generische Programmierung]].
Crutchfield begann ihre Laufbahn als alpine Rennläuferin. Von 1959 bis 1966 gehörte sie der kanadischen Skinationalmannschaft an. 1960 rutschte sie als Ersatzläuferin für [[Anne Heggtveit]] in das Team für die [[Olympische Winterspiele 1960|Olympischen Winterspiele 1960]] in [[Squaw Valley (Placer County)|Squaw Valley]], kam aber dann dort nicht zum Einsatz. Noch im gleichen Jahr bestätigte sie ihre Nominierung mit dem Gewinn des [[Ryan Cup]]s. Im Jahr darauf nahm sie in [[Kitzbühel]] am legendären [[Hahnenkammrennen]] teil und belegte den 11. Platz. 1962 und 1964 gewann sie ihre ersten beiden kanadischen Meistertitel. Im Februar 1964 gab sie in [[Innsbruck]] ihr Debüt bei den [[Olympische Winterspiele 1964|Olympischen Winterspielen]]. Sie ging in allen drei Rennen an den Start, bestes Resultat war der 16. Platz im Slalom.


C++ basiert auf der [[C (Programmiersprache)|Programmiersprache C]] wie in [[International Organization for Standardization|ISO]]/IEC 9899:1990 beschrieben. Zusätzlich zu den in [[C (Programmiersprache)|C]] vorhandenen Möglichkeiten bietet C++ weitere [[Datentyp]]en, [[objektorientierte Programmierung#Klassen|Klassen]] mit [[Vererbung (objektorientierte Programmierung)|Vererbung]] und [[virtuelle Funktion|virtuellen Funktionen]], [[Ausnahme (EDV)|Ausnahmebehandlung]], [[Template (Programmierung)|Templates (Schablonen)]], [[Namensraum|Namensräume]], [[Inline-Ersetzung|Inline-Funktionen]], [[Überladen]] von [[Operator]]en und Funktionsnamen, [[Referenz (Programmierung)|Referenzen]], Operatoren zur [[Freispeicher (Programmierung)|Freispeicherverwaltung]] und mit der [[C++-Standardbibliothek]] eine erweiterte [[Bibliothek (Programmierung)|Bibliothek]].
Dank ihrer Bekanntschaft zum kanadischen Bobolympiasieger [[Victor Emery]] entdeckte Crutchfield 1967 das Rennodeln. Sie wurde auf Anhieb 1967 und 1968 zweimal in Folge kanadische Meisterin im Einer der Frauen und qualifizierte sich 1968 auch in dieser Sportart für die [[Olympische Winterspiele 1968|Olympischen Winterspiele]]. In [[Grenoble]] wurde sie schließlich Zwölfte im Wettbewerb der Frauen.


== Entstehungsgeschichte ==
Ihre dritte erfolgreiche Sportkarriere baute sie sich im Wasserskilaufen auf. Im Lauf ihrer Karriere fügte sie ihrer Titelsammlung insgesamt 14 weitere hinzu. Dazu stellte sie mehrere Landesrekorde im Wasserski-Weitsprung auf. So war sie die erste Kanadierin, die einen Sprung über 100 Fuß stand.
C++ wurde von [[Bjarne Stroustrup]] ab 1979 bei [[AT&T]] entwickelt. Die Idee für eine neue Programmiersprache entwickelte er aus den Erfahrungen mit der Programmiersprache [[Simula]] im Rahmen seiner [[Promotion (Doktor)|Promotion]]. Stroustrup erschien [[Simula]] zwar geeignet für den Einsatz in großen Software-Projekten, die Struktur der Sprache erschwerte aber die für viele praktische Anwendungen erforderliche Erzeugung [[Effizienz|hocheffizienter Programme]]. Effiziente Programme ließen sich zwar mit der Sprache [[BCPL]] schreiben, für große Projekte war BCPL aber wiederum ungeeignet.

Als Stroustrup in den [[Bell Laboratories|Bell-Laboratorien]] zu arbeiten begann, sah er sich mit dem Problem konfrontiert, den [[UNIX]]-Betriebssystemkern im Hinblick auf verteilte Programmierung analysieren zu müssen. Mit den Erfahrungen aus seiner Promotion machte er sich daran, die Programmiersprache C um ein [[Klasse (objektorientierte Programmierung)|Klassenkonzept]] zu erweitern, für das die Sprache ''Simula-67'' das primäre Vorbild war.

Die Wahl fiel auf die Programmiersprache [[C (Programmiersprache)|C]], weil C eine Mehrzwecksprache war, schnellen Code produzierte und einfach auf andere Plattformen zu [[Portierung|portieren]] war. Als dem Betriebssystem [[UNIX]] beiliegende Sprache hatte C außerdem eine nicht unerhebliche Verbreitung. Zunächst fügte er der Sprache Klassen (mit Datenkapselung) hinzu, dann abgeleitete Klassen, ein strengeres [[Typsystem]], Inline-Funktionen und Standard-Argumente.

Während Stroustrup „''C mit Klassen''“ („''C with Classes''“) entwickelte (woraus später C++ wurde), schrieb er auch [[cfront]], einen Compiler, der aus ''C mit Klassen'' zunächst C-Code als Zwischenresultat erzeugte. Die erste kommerzielle Version von ''cfront'' erschien im Oktober 1985.

1982 wurde ''C mit Klassen'' in ''C++'' umbenannt. Erweiterungen darin waren: virtuelle Funktionen, Überladen von Funktionsnamen und Operatoren, Referenzen, Konstanten, änderbare Freispeicherverwaltung und eine verbesserte Typüberprüfung. Die Möglichkeit von Kommentaren, die an das Zeilenende gebunden sind, wurde wieder aus BCPL übernommen (<code>//</code>).

1985 erschien die erste Version von C++, die eine wichtige Referenzversion darstellte, da die Sprache damals noch nicht standardisiert war. 1989 erschien die Version 2.0 von C++. Neu darin waren [[objektorientierte Programmierung|Mehrfachvererbung]], abstrakte Klassen, statische Elementfunktionen, konstante Elementfunktionen und die Erweiterung des Schutzmodells um <tt>protected</tt>. 1990 erschien das Buch ''The Annotated C++ Reference Manual'', das als Grundlage für den darauffolgenden Standardisierungsprozess diente.

Relativ spät wurden der Sprache ''Templates'', ''Ausnahmen'', ''Namensräume'', neuartige ''Typumwandlungen'' und ''boolesche Typen'' hinzugefügt.

Im Zuge der Weiterentwicklung der Sprache C++ entstand auch eine gegenüber C erweiterte Standardbibliothek. Erste Ergänzung war die ''Stream-I/O-Bibliothek'', die Ersatz für traditionelle C-Funktionen wie zum Beispiel <code>printf()</code> und <code>scanf()</code> bietet. Eine der wesentlichen Erweiterungen der Standardbibliothek kam später durch die Integration großer Teile der bei [[Hewlett-Packard]] entwickelten [[Standard Template Library]] (''STL'') hinzu.

Nach jahrelanger Arbeit wurde schließlich 1998 von der [[International Organization for Standardization|ISO]] die endgültige Fassung der Sprache C++ (ISO/IEC 14882:1998) genormt.

2003 wurde die erste überarbeitete Version von ''ISO/IEC 14882:1998'' verabschiedet (ISO/IEC 14882:2003). Diese Revision ist lediglich eine Nachbesserung der Norm ''ISO/IEC 14882:1998'' und sollte nicht mit der in Arbeit befindlichen Version verwechselt werden. Die nächste Version der Sprache C++ erscheint voraussichtlich noch in dieser [[Dekade]]. (s. ''[[#In der Entwicklung befindliche Version|in der Entwicklung befindliche Version]]'')

Im April 2006 wurde der erste ''TR'' (Technical Report) in Berlin vom C++-Komitee verabschiedet. Dabei handelt es sich um die erste Erweiterung zur Standardbibliothek. Der [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf TR1] beschreibt sehr viel genutzte C++-Bibliotheken, welche nun offiziell für ISO C++ als Bibliothekserweiterung verfügbar gemacht werden können. Dabei handelt es sich z.&nbsp;B. um [[regulärer Ausdruck|reguläre Ausdrücke]], verschiedene Smartpointer, eine Hashmap, Zufallszahlbibliothek uvm. Die meisten kommen aus der [[Boost|Boost-Bibliothek]] mit minimalen Änderungen. Zu finden ist die TR1-Bibliothek im Namespace <tt>std::tr1</tt>.

== Merkmale ==
C++ unterstützt die folgenden Programmiertechniken:

* [[Prozedurale Programmierung]]
* [[Modulare Programmierung]]
* [[Strukturierte Programmierung]]
* [[Datentyp|Programmierung mit selbstdefinierten Datentypen]] ([[Abstrakter Datentyp|abstrakte Datentypen]])
* [[Objektorientierte Programmierung]] (siehe auch [[Polymorphie (Programmierung)|Polymorphie (Vielgestaltigkeit)]])
* [[Generische Programmierung]] mittels [[Template (Programmierung)|Templates]].

C++ ist somit eine so genannte „Multiparadigmen-Sprache“, die dem Programmierer sehr viele Freiheiten lässt.

''Siehe auch:'' [[Programmierparadigma]], [[Entwurfsmuster]], [[Ressourcenbelegung ist Initialisierung|RAII]], [[Metaprogrammierung]]

== Vor- und Nachteile ==
=== Vorteile ===
* Die Erzeugung hocheffizienten Codes ist möglich.
* Sowohl maschinennahe als auch hochabstrakte Programmierung ist möglich.
* Sehr hohe Ausdrucksstärke und Flexibilität – Beispiel: die anpassbare Freispeicherverwaltung, in die sich etwa nahtlos eine [[automatische Speicherbereinigung]] (englisch ''garbage collector'') integrieren lässt.
* Für große Projekte geeignet.
* Weite Verbreitung.
* Die Sprache ist nicht im Besitz einer Firma (im Unterschied zu beispielsweise [[Java (Programmiersprache)|Java]] - Eigentum der Firma SUN oder [[Visual Basic]] - Eigentum der Firma Microsoft). Standardisierung durch die [[International Organization for Standardization|ISO]]<!-- Warum das ein Vorteil ist, muss noch stärker herausgearbeitet werden! -->
* Weitreichende Möglichkeiten für die [[C-Plusplus-Metaprogrammierung|Metaprogrammierung]]
* Kompatibilität mit C – Vorteil: Es steht eine breite Codebasis zur Verfügung.
* Die aktuellen [[Framework]]s für C++ sind recht weit entwickelt und einige wie zum Beispiel [[Qt (Toolkit)|Qt]] sind plattformübergreifend.

=== Nachteile ===
* Historischer Ballast muss aufgrund der Kompatibilität mit C mitgeschleppt werden, zum Beispiel der von C übernommene Präprozessor, oder die teilweise schwer verständliche C-Syntax. Die Kompatibilität zu C hat u.&nbsp;a. zur Folge, dass einige Details der Sprache Compiler-spezifisch sind, die es aber nicht sein müssten. So ist beispielsweise die Auswertungsreihenfolge von Teilausdrücken je nach Compiler und Plattform unterschiedlich. Dies erschwert die [[Portierung]] von C++-Programmen zwischen Rechnertypen, Betriebssystemen und unterschiedlichen Compilern.
* Zum Erlernen sind verhältnismäßig lange Einarbeitungszeiten erforderlich.
* Die aktuelle C++-Standardbibliothek deckt einige neue Erfordernisse noch nicht ausreichend ab, zum Beispiel [[Thread (Informatik)|Thread]]s, [[TCP/IP]], Dateisystem-Verzeichnisse. Deshalb besteht in diesen Bereichen, bei Verwendung herstellerspezifischer Bibliotheken, eine eingeschränkte Portabilität über Betriebssystemgrenzen hinweg (Entwicklung zahlreicher externer Bibliotheken).
* Aufgrund des breiten Leistungspektrums und der vielfältigen Gestaltungsmöglichkeiten ist die Verwendung von Programmierrichtlinien (aus Gründen der Wartbarkeit und Fehleridentifizierung) mehr als in anderen Sprachen anzuraten.

== Hallo-Welt-Programm in C++ ==
Der folgende [[Quelltext]] stellt ein einfaches C++-[[Computerprogramm|Programm]] dar, das die Meldung [[Hallo-Welt-Programm|„''Hallo Welt!''“]] auf dem Standardausgabemedium ausgibt:

<!-- WICHTIGER HINWEIS: Änderungen am Hallo-Welt-Programm erst auf der Diskussionsseite besprechen! Nicht abgesprochene Änderungen am Hello-World-Programm werden umgehend zurückgesetzt. -->
#include <iostream> <!-- bitte nicht ändern -->
int main() <!-- bitte nicht ändern -->
Für ihre sportlichen Verdienste wurde sie 1984 in die Hall of Fame des [[Canada Ski Museum]] aufgenommen.
{
std::cout << "Hallo Welt!" << std::endl; <!-- bitte nicht ändern -->
<!-- Der Rückgabewert ist (im Unterschied zu C89) implizit vorhanden, fehlt also nicht! -->
}


=== Erläuterungen ===
[[Kategorie:Frau|Crutchfield, Linda]]
Bei <tt>main</tt> handelt es sich um eine [[Funktion (Programmierung)|Funktion]], genauer gesagt ist es die Hauptfunktion des gesamten Programms. Die Funktion <tt>main</tt> ist in jedem C++-Programm vorhanden und wird nach dem Start des Programms aufgerufen.
[[Kategorie:Skiläufer (Kanada)|Crutchfield, Linda]]
[[Kategorie:Rennrodler (Kanada)|Crutchfield, Linda]]
[[Kategorie:Wasserskiläufer|Crutchfield, Linda]]
[[Kategorie:Geboren 1942|Crutchfield, Linda]]


Die C++-ISO-Norm schreibt vor, dass das Ergebnis von <tt>main</tt> vom Typ <tt>int</tt> sein muss. Ein Programm, bei dem das Ergebnis von <tt>main</tt> nicht vom Typ <tt>int</tt> ist, ist kein gültiges Programm im Sinne der C++-ISO-Norm (ISO-14882).
{{Personendaten|

NAME=Crutchfield, Linda
Die Funktion <tt>main</tt> ist die einzige Funktion, die &ndash; obwohl sie einen Wert zurückgibt &ndash; nicht die Anweisung „<tt>return</tt>“ benötigt. Ohne die explizite Anweisung <tt>return</tt> gibt <tt>main</tt> den Wert 0 zurück.
|ALTERNATIVNAMEN=

|KURZBESCHREIBUNG=Kanadische Skirennläuferin, Rennrodlerin und Wasserskiläuferin
== Verwandtschaft mit C ==
|GEBURTSDATUM=[[3. April]] [[1942]]
C++ ist eine Erweiterung der Programmiersprache [[C (Programmiersprache)|C]] gemäß dem Stand von 1990 (''ISO/IEC 9899:1990'', auch kurz [[ISO/IEC_9899:1990|C90]] genannt). C++ enthält C nach dem Stand ''C90'' fast vollständig. Einige wenige C-Programme lassen sich nicht ohne weiteres als C++ kompilieren beziehungsweise haben als C++-Programme eine etwas andere Bedeutung. Dabei handelt es sich aber um Sonderfälle, die in der Praxis keine große Rolle spielen.
|GEBURTSORT=[[Shawinigan]]

|STERBEDATUM=
Die Kompatibilität mit C war eines der Hauptdesignziele bei der Entwicklung der Programmiersprache C++. Grund dafür war die große Verbreitung von C. C-Compiler sind auch heute noch für praktisch jeden Prozessor verfügbar. Deswegen gilt die Kompatibilität mit C immer noch als eine der wichtigsten Eigenschaften von C++.
|STERBEORT=

}}
Im Laufe der Entwicklung der beiden Sprachen gab es auch Rückwirkungen von C++ auf C. Beispielsweise wurden in C <tt>const</tt> sowie die [[Funktionsprototyp]]en von C++ übernommen.

Die letzten Änderungen an C fanden 1999 statt (ISO/IEC 9899:1999). Gemäß dem [[Ratifizierung]]sjahr ''1999'' spricht man, wenn man sich auf diesen C-Stand bezieht, deshalb auch von [[ISO/IEC_9899:1999|C99]]. Ein Beispiel für darin eingeführte Spracherweiterungen sind die so genannten [[Variable_Length_Array|VLA]]s (engl. ''variable length array'').

Aufgrund dieser Weiterentwicklung von C gibt es theoretisch mehr Inkompatibilitäten zwischen C und C++. Mittlerweile unterstützen viele Compiler diesen neuen Stand C99 in der Sprachdefinition und nicht ganz so viele auch in der Bibliothek, so dass die Bedeutung dieser Unterschiede zwischen C und C++ zunimmt. Bei der in Arbeit befindlichen C++-Version wird u.&nbsp;a. daran gearbeitet, die neuen C99-Merkmale mit einzuarbeiten. Einige C++-Compiler unterstützen C99-Neuerungen schon jetzt (z.&nbsp;B. der [[GNU Compiler Collection|gcc]]).

== Vergleich mit anderen Sprachen ==
C++ war nicht der einzige Ansatz, die Programmiersprache C um Eigenschaften zu erweitern, die das objektorientierte Programmieren vereinfachen. In den 1980er Jahren entstand die Programmiersprache [[Objective-C]], die sich aber im Gegensatz zu C++ an [[Smalltalk (Programmiersprache)|Smalltalk]] und nicht an [[Simula]] orientierte. Die Syntax von Objective-C unterscheidet sich unter anderem wegen der Smalltalk-Wurzeln stark von C++. Objective-C ist weniger weit verbreitet als C++. Bekannteste Einsatzgebiete von Objective-C sind in [[OpenStep]] und [[Mac OS X]].

Die Programmiersprachen [[Java (Programmiersprache)|Java]] und [[C-Sharp|C#]] haben eine ähnliche, ebenfalls an C angelehnte Syntax wie C++, sind auch objektorientiert und unterstützen Typparameter, weshalb ein Vergleich mit ihnen besonders naheliegend ist.
<!-- TODO: Vergleich mit Java und C# -->

''Siehe auch:'' [[Simula]], [[Smalltalk (Programmiersprache)|Smalltalk]], [[Vergleich objektorientierter Programmiersprachen]]

== In der Entwicklung befindliche Version ==
Im Jahr 2003 erschien eine Ergänzung des Standard (ISO/IEC 14882:2003), deren Inhalt zum C++98 gehört.
'''C++0x''' (manchmal auch '''C++200x''') ist eine inoffizielle Abkürzung für die in der Entwicklung befindliche Version der Programmiersprache C++. Zwar scheint der Name anzudeuten, dass dieser Standard bis spätestens 2009 fertig gestellt wird, es handelt sich aber lediglich um eine grobe Einschätzung des möglichen Erscheinungstermins.

* [http://www.artima.com/cppsource/cpp0x.html Bjarne Stroustroup: ''A Brief Look at C++0x'' - 2. Januar 2006]

== Der Name „C++“ ==
Der Name ist eine Wortschöpfung von Rick Mascitti und wurde zum ersten Mal im Dezember 1983 benutzt. Während ihrer Entstehung wurde die Sprache zuerst „C with Classes“ genannt. Der endgültige Name kommt vom [[Inkrement und Dekrement|Inkrement]]-Operator „++“, der den Wert einer Integer-Variablen um eins erhöht. (Genau betrachtet wäre der Name ''++C'' passender für die neue Sprache gewesen.)

== Zersplitterung der Sprachbenutzung, Implementierung und Spezifizierung ==
Im Gegensatz zu vielen anderen neueren Programmiersprachen ist C++ nur eine Spezifikation (sogar ein ISO-Standard), ohne eine Referenz-Implementierung. Das hat den Vorteil, dass man bei der Benutzung von C++ nicht an einen Hersteller gebunden wird und eine große Anzahl an Implementierungen existiert. Ein enormer Nachteil ist aber die langsame Umsetzung der Spezifikationen in den Implementierungen. Zwar entwickelt sich C++ in langsamen Schritten weiter, seit 1997 erfolgten nur noch Fehlerkorrekturen, aber dennoch dauerte es lange bis der C++-Standard weitestgehend unterstützt wurde. Heutige Inkompatibilitäten beziehen sich in der Regel nur auf das Sprachmittel „<code>export</code>“.

Ein weiterer Grund für die Zersplitterung der Sprache ist die lange Benutzung. C++ wurde in der Phase, in der die Sprache die größte Entwicklung erlebte, bereits sehr intensiv eingesetzt. Dies sorgte dafür, dass viele Entwickler nicht oder nur unzureichend mit neueren Eigenschaften der Sprache vertraut sind oder diese auf Grund von alten Compilern nicht einsetzen konnten. Daher sind viele Projekte, die in C++ entwickelt wurden, nicht auf dem aktuellen Stand der C++ Programmierung und sogar inkompatibel zu den aktuellen C++-Normen.

Auch der Stand vieler Lehrbücher und Lehrveranstaltungen ist veraltet. Da sich einige Compiler, wie der GCC, der C++-Sprachdefinition immer mehr annähern, stimmen Lehrinhalte oft nicht mit der Realität existierender Compiler überein.

== C++-Compiler ==
Nachfolgend eine Auswahl von bekannten C++ Compilern (in alphabetischer Reihenfolge):
{| {{Prettytable}}
|-- {{highlight1}}
! Compiler
! Kommentar
! Mit spezieller [[integrierte Entwicklungsumgebung|IDE]]
! Plattform
|-----
|style="white-space:nowrap;"| ''[[C++Builder|Borland C++ Builder]]''
| proprietär (eine ältere Version ist kostenlos ohne IDE verfügbar)
| Ja
| Windows, Linux ([[Kylix]])
|-----
|style="white-space:nowrap;"| ''[http://www.comeaucomputing.com/ Comeau's C++ Compiler]''
| Gilt als der Compiler, der C++ vollständig umsetzt; unterstützt zum Beispiel auch <tt>export</tt> von Templates; ist jedoch mehr ein Frontend-Compiler; proprietär (kann [http://www.comeaucomputing.com/tryitout/ über das Internet] ausprobiert werden)
| Nein
| Windows, Linux, Solaris/SPARC
|-----
|style="white-space:nowrap;"| ''[http://www.digitalmars.com DMC]''
| Digital Mars C/C++ Compiler
| Nein
| Windows, DOS
|-----
|style="white-space:nowrap;"| ''[http://gcc.gnu.org g++]''
| Bestandteil der [[GNU Compiler Collection|GCC]]; setzt ab Version 3.4 die Sprache C++ nahezu vollständig um; [[Freie Software]]
| Nein
| Unix, Linux, Mac&nbsp;OS&nbsp;X, Windows (dort auch als [[MinGW]]), AmigaOS
|-----
|style="white-space:nowrap;"| ''[[Intel C++ Compiler]]''
| Setzt C++ nahezu vollständig um; erzeugt hocheffizienten Code für Intel-Prozessoren; [[proprietär]]
| Nein
| Windows, Linux, MacOS&nbsp;X
|-----
|style="white-space:nowrap;"| ''[[Microsoft Visual C++]]''
| Verbreitetster Compiler unter Windows; setzt ab der Version 7.1 die Sprache C++ nahezu vollständig um; proprietär; kostenlose Version mit Einschränkungen
| Ja
| Windows
|-----
|style="white-space:nowrap;"| ''[http://www.openwatcom.org/ Open Watcom]''
| Auch Unterstützung älterer Plattformen, bisher noch ohne vollständige C++-Standardbibliothek; [[Open Source]]
| Ja
| DOS, Windows, OS/2, Netware (Linux-Unterstützung in Arbeit)
|-----
|style="white-space:nowrap;"| ''[http://www.pgroup.com/ PGI Compiler & Tools]''
| Spezielle C++- und Fortran-Compiler für [[Hochleistungsrechnen | High Performance Computing]] von ''The Portland Group''.
| Nein
| Linux, Windows
|-----
|style="white-space:nowrap;"| ''[http://www.turboexplorer.com/cpp Turbo C++]''
| Kostenloses Basis-Packet aus dem kostenpflichtigen Turbo C++ Professional.
| Ja
| Windows
|}
<!-- Bitte auch die Spalte „Kommentar“ nutzen. :-) -->

Für [[Compiler|Kommandozeilen-Compiler]], die keine spezielle [[integrierte Entwicklungsumgebung]] mitbringen, existiert eine große Zahl von unabhängigen Werkzeugen, die die Entwicklung sehr erleichtern. Eine Liste derer findet man im selbigen Artikel.

''Siehe auch:'' [[Compiler]], [[Visuelle Programmierumgebung]]

== Siehe auch ==
* [[Boost]]
* [[C++-Glossar]]
* [[C++-Standardbibliothek]]
* [[Template (Programmierung)|Templates (Schablonen)]]
* [[C++-Metaprogrammierung]] (siehe auch [[Metaprogrammierung]])
* [[C++/CLI]].
* [[Ressourcenbelegung ist Initialisierung|RAII]] ('''''r'''esource '''a'''cquisition '''i'''s '''i'''nitialization'')
* [[Escape-Sequenz]]
* [[C (Programmiersprache)|Programmiersprache C]]
{{Wikibooks|en:C++ Programming|C++-Programmierung (englisch)}}
<!-- Der deutsche Wikibooks-Lehrgang ist nicht gut. Bitte nicht einfügen. -->

== Literatur ==
*[[Bjarne Stroustrup]]: ''Die C++-Programmiersprache'', Addison-Wesley, ISBN 3-8273-1660-X, ''das'' Standardwerk zu C++, Grundkenntnisse in C von Vorteil.
*Andrew Koenig, Barbara E. Moo: ''Intensivkurs C++'', Pearson Studium, ISBN 3-8273-7029-9, Anfängerbuch, ein gewisses Grundverständnis der Programmierung ist von Vorteil.
*Scott Meyers: ''Effektiv C++ Programmieren – 55 Möglichkeiten, Ihre Programme und Entwürfe zu verbessern'', Addison-Wesley, ISBN 3-8273-2297-9, zur Vertiefung bereits vorhandener C++-Kenntnisse.
*Scott Meyers: ''Mehr Effektiv C++ programmieren – 35 neue Wege zur Verbesserung ihrer Programme und Entwürfe'', Addison-Wesley, ISBN 3-8273-1275-2, Vertiefung vorhandener C++-Kenntnisse.
*[[Herb Sutter]]: ''Exceptional C++'', ISBN 3-8273-1711-8, Vertiefung vorhandener C++-Kenntnisse.
*[[Andrei Alexandrescu]]: ''Modernes C++ Design – Generische Programmierung und Entwurfsmuster angewendet'', ISBN 3-8266-1347-3, ein Standardwerk zur [[C-Plusplus-Metaprogrammierung|C++-Metaprogrammierung]], setzt ein tiefes Verständnis von C++ voraus.
*[[Bruce Eckel]]: ''Thinking in C++, Volume 1: Introduction to Standard C++'', Prentice Hall, 2000, ISBN 0139798099, auch als kostenloses online-Buch verfügbar
*[[Bruce Eckel]]: ''Thinking in C++, Vol. 2: Practical Programming'', Prentice Hall, 2003, ISBN 0130353132, auch als kostenloses online-Buch verfügbar, sehr gute Beispiele als Quelltext
<!-- Neue Einträge bitte auf der Diskussionsseite begründen. Einen Kommentar zu Stärken und Schwächen des jeweiligen Buches hinzufügen!! -->

== Weblinks ==
* [http://www.fz-juelich.de/zam/cv/lang/cplusplus/cplusplus_ext Linksammlung zu vielen C++ - Themen]
* [http://www.parashift.com/c++-faq-lite/ Oft gestellte Fragen und Antworten], englisch
<!-- * [http://tutorial.schornboeck.net/inhalt.htm C++ Tutorial], deutsch -- Leider teilweise falsch. Lieber kein Tutorial als eines, das falsches Wissen vermittelt. -->
* [http://www.open-std.org/jtc1/sc22/wg21/ Webauftritt des C++-Standardisierungskomitees], englisch
* [http://groups.google.de/groups?group=de.comp.lang.iso-c++ C++-Diskussionsgruppe], deutsch
* [http://www.cppreference.com/ C++-Online-Referenz], englisch
* [http://www.accu.org/ ACCU], internationale Interessengemeinschaft für C und C++
* [http://atlas.web.cern.ch/Atlas/GROUPS/SOFTWARE/OO/tools/java/misc/ACritiqueOfC++.pdf Ian Joyner: „C++??“ – Kritik an C++]
<!-- Bitte nur hochwertige Links hinzufügen und vorhandene schlechtere Links ersetzen um die Anzahl klein zu halten!! -->

[[Kategorie:Programmiersprache C++| ]] <!-- "| " sorgt dafür, dass der Artikel als Oberartikel der Kategorie erkannt wird. Bitte _nicht_ löschen -->

[[af:C++]]
[[an:C++]]
[[ar:سي++]]
[[bg:C++]]
[[bs:C++]]
[[ca:C++]]
[[cs:C++]]
[[da:C++]]
[[en:C++]]
[[eo:C++]]
[[es:C++]]
[[et:C++]]
[[eu:C++]]
[[fa:سی‌پلاس‌پلاس]]
[[fi:C++]]
[[fr:C++]]
[[gl:C++]]
[[he:C++‎]]
[[hr:C++]]
[[hy:C++ ի Հիմունքները]]
[[id:C++]]
[[it:C++]]
[[ja:C++]]
[[ka:C++]]
[[ko:C++]]
[[la:C++]]
[[lb:C++]]
[[lt:C++]]
[[nl:C++]]
[[nn:C++]]
[[no:C++]]
[[pl:C++]]
[[pt:C++]]
[[ro:C++]]
[[ru:C++]]
[[simple:C++]]
[[sk:C++]]
[[sl:C++]]
[[sv:C++]]
[[th:ภาษาซีพลัสพลัส]]
[[tr:C++]]
[[uk:C++]]
[[vi:C++]]
[[zh:C++]]
[[zh-yue:C++]]

Version vom 7. Dezember 2006, 16:58 Uhr

C++
Basisdaten
Paradigmen: generisch, objektorientiert, prozedural
Erscheinungsjahr: 1985, letzte Überarbeitung 2003
Designer: Bjarne Stroustrup
Entwickler: Bjarne Stroustrup
Aktuelle Version C++23[1] (19. Oktober 2024)
Typisierung: statisch, stark
Wichtige Implementierungen: GNU Compiler Collection, Microsoft Visual C++, Borland C++ Builder
Beeinflusst von: C, Simula, Ada 83, CLU
Beeinflusste: Ada 95, C-Sharp, Java, PHP
isocpp.org

C++ ist eine der verbreitetsten und industriell bedeutendsten Programmiersprachen. Sie ist als Mehrzwecksprache konzipiert und unterstützt insbesondere effiziente und maschinennahe Programmierung, Datenabstraktion sowie objektorientierte und generische Programmierung.

C++ basiert auf der Programmiersprache C wie in ISO/IEC 9899:1990 beschrieben. Zusätzlich zu den in C vorhandenen Möglichkeiten bietet C++ weitere Datentypen, Klassen mit Vererbung und virtuellen Funktionen, Ausnahmebehandlung, Templates (Schablonen), Namensräume, Inline-Funktionen, Überladen von Operatoren und Funktionsnamen, Referenzen, Operatoren zur Freispeicherverwaltung und mit der C++-Standardbibliothek eine erweiterte Bibliothek.

Entstehungsgeschichte

C++ wurde von Bjarne Stroustrup ab 1979 bei AT&T entwickelt. Die Idee für eine neue Programmiersprache entwickelte er aus den Erfahrungen mit der Programmiersprache Simula im Rahmen seiner Promotion. Stroustrup erschien Simula zwar geeignet für den Einsatz in großen Software-Projekten, die Struktur der Sprache erschwerte aber die für viele praktische Anwendungen erforderliche Erzeugung hocheffizienter Programme. Effiziente Programme ließen sich zwar mit der Sprache BCPL schreiben, für große Projekte war BCPL aber wiederum ungeeignet.

Als Stroustrup in den Bell-Laboratorien zu arbeiten begann, sah er sich mit dem Problem konfrontiert, den UNIX-Betriebssystemkern im Hinblick auf verteilte Programmierung analysieren zu müssen. Mit den Erfahrungen aus seiner Promotion machte er sich daran, die Programmiersprache C um ein Klassenkonzept zu erweitern, für das die Sprache Simula-67 das primäre Vorbild war.

Die Wahl fiel auf die Programmiersprache C, weil C eine Mehrzwecksprache war, schnellen Code produzierte und einfach auf andere Plattformen zu portieren war. Als dem Betriebssystem UNIX beiliegende Sprache hatte C außerdem eine nicht unerhebliche Verbreitung. Zunächst fügte er der Sprache Klassen (mit Datenkapselung) hinzu, dann abgeleitete Klassen, ein strengeres Typsystem, Inline-Funktionen und Standard-Argumente.

Während Stroustrup „C mit Klassen“ („C with Classes“) entwickelte (woraus später C++ wurde), schrieb er auch cfront, einen Compiler, der aus C mit Klassen zunächst C-Code als Zwischenresultat erzeugte. Die erste kommerzielle Version von cfront erschien im Oktober 1985.

1982 wurde C mit Klassen in C++ umbenannt. Erweiterungen darin waren: virtuelle Funktionen, Überladen von Funktionsnamen und Operatoren, Referenzen, Konstanten, änderbare Freispeicherverwaltung und eine verbesserte Typüberprüfung. Die Möglichkeit von Kommentaren, die an das Zeilenende gebunden sind, wurde wieder aus BCPL übernommen (//).

1985 erschien die erste Version von C++, die eine wichtige Referenzversion darstellte, da die Sprache damals noch nicht standardisiert war. 1989 erschien die Version 2.0 von C++. Neu darin waren Mehrfachvererbung, abstrakte Klassen, statische Elementfunktionen, konstante Elementfunktionen und die Erweiterung des Schutzmodells um protected. 1990 erschien das Buch The Annotated C++ Reference Manual, das als Grundlage für den darauffolgenden Standardisierungsprozess diente.

Relativ spät wurden der Sprache Templates, Ausnahmen, Namensräume, neuartige Typumwandlungen und boolesche Typen hinzugefügt.

Im Zuge der Weiterentwicklung der Sprache C++ entstand auch eine gegenüber C erweiterte Standardbibliothek. Erste Ergänzung war die Stream-I/O-Bibliothek, die Ersatz für traditionelle C-Funktionen wie zum Beispiel printf() und scanf() bietet. Eine der wesentlichen Erweiterungen der Standardbibliothek kam später durch die Integration großer Teile der bei Hewlett-Packard entwickelten Standard Template Library (STL) hinzu.

Nach jahrelanger Arbeit wurde schließlich 1998 von der ISO die endgültige Fassung der Sprache C++ (ISO/IEC 14882:1998) genormt.

2003 wurde die erste überarbeitete Version von ISO/IEC 14882:1998 verabschiedet (ISO/IEC 14882:2003). Diese Revision ist lediglich eine Nachbesserung der Norm ISO/IEC 14882:1998 und sollte nicht mit der in Arbeit befindlichen Version verwechselt werden. Die nächste Version der Sprache C++ erscheint voraussichtlich noch in dieser Dekade. (s. in der Entwicklung befindliche Version)

Im April 2006 wurde der erste TR (Technical Report) in Berlin vom C++-Komitee verabschiedet. Dabei handelt es sich um die erste Erweiterung zur Standardbibliothek. Der TR1 beschreibt sehr viel genutzte C++-Bibliotheken, welche nun offiziell für ISO C++ als Bibliothekserweiterung verfügbar gemacht werden können. Dabei handelt es sich z. B. um reguläre Ausdrücke, verschiedene Smartpointer, eine Hashmap, Zufallszahlbibliothek uvm. Die meisten kommen aus der Boost-Bibliothek mit minimalen Änderungen. Zu finden ist die TR1-Bibliothek im Namespace std::tr1.

Merkmale

C++ unterstützt die folgenden Programmiertechniken:

C++ ist somit eine so genannte „Multiparadigmen-Sprache“, die dem Programmierer sehr viele Freiheiten lässt.

Siehe auch: Programmierparadigma, Entwurfsmuster, RAII, Metaprogrammierung

Vor- und Nachteile

Vorteile

  • Die Erzeugung hocheffizienten Codes ist möglich.
  • Sowohl maschinennahe als auch hochabstrakte Programmierung ist möglich.
  • Sehr hohe Ausdrucksstärke und Flexibilität – Beispiel: die anpassbare Freispeicherverwaltung, in die sich etwa nahtlos eine automatische Speicherbereinigung (englisch garbage collector) integrieren lässt.
  • Für große Projekte geeignet.
  • Weite Verbreitung.
  • Die Sprache ist nicht im Besitz einer Firma (im Unterschied zu beispielsweise Java - Eigentum der Firma SUN oder Visual Basic - Eigentum der Firma Microsoft). Standardisierung durch die ISO
  • Weitreichende Möglichkeiten für die Metaprogrammierung
  • Kompatibilität mit C – Vorteil: Es steht eine breite Codebasis zur Verfügung.
  • Die aktuellen Frameworks für C++ sind recht weit entwickelt und einige wie zum Beispiel Qt sind plattformübergreifend.

Nachteile

  • Historischer Ballast muss aufgrund der Kompatibilität mit C mitgeschleppt werden, zum Beispiel der von C übernommene Präprozessor, oder die teilweise schwer verständliche C-Syntax. Die Kompatibilität zu C hat u. a. zur Folge, dass einige Details der Sprache Compiler-spezifisch sind, die es aber nicht sein müssten. So ist beispielsweise die Auswertungsreihenfolge von Teilausdrücken je nach Compiler und Plattform unterschiedlich. Dies erschwert die Portierung von C++-Programmen zwischen Rechnertypen, Betriebssystemen und unterschiedlichen Compilern.
  • Zum Erlernen sind verhältnismäßig lange Einarbeitungszeiten erforderlich.
  • Die aktuelle C++-Standardbibliothek deckt einige neue Erfordernisse noch nicht ausreichend ab, zum Beispiel Threads, TCP/IP, Dateisystem-Verzeichnisse. Deshalb besteht in diesen Bereichen, bei Verwendung herstellerspezifischer Bibliotheken, eine eingeschränkte Portabilität über Betriebssystemgrenzen hinweg (Entwicklung zahlreicher externer Bibliotheken).
  • Aufgrund des breiten Leistungspektrums und der vielfältigen Gestaltungsmöglichkeiten ist die Verwendung von Programmierrichtlinien (aus Gründen der Wartbarkeit und Fehleridentifizierung) mehr als in anderen Sprachen anzuraten.

Hallo-Welt-Programm in C++

Der folgende Quelltext stellt ein einfaches C++-Programm dar, das die Meldung Hallo Welt! auf dem Standardausgabemedium ausgibt:

#include <iostream> 

int main() 
{
  std::cout << "Hallo Welt!" << std::endl; 
}

Erläuterungen

Bei main handelt es sich um eine Funktion, genauer gesagt ist es die Hauptfunktion des gesamten Programms. Die Funktion main ist in jedem C++-Programm vorhanden und wird nach dem Start des Programms aufgerufen.

Die C++-ISO-Norm schreibt vor, dass das Ergebnis von main vom Typ int sein muss. Ein Programm, bei dem das Ergebnis von main nicht vom Typ int ist, ist kein gültiges Programm im Sinne der C++-ISO-Norm (ISO-14882).

Die Funktion main ist die einzige Funktion, die – obwohl sie einen Wert zurückgibt – nicht die Anweisung „return“ benötigt. Ohne die explizite Anweisung return gibt main den Wert 0 zurück.

Verwandtschaft mit C

C++ ist eine Erweiterung der Programmiersprache C gemäß dem Stand von 1990 (ISO/IEC 9899:1990, auch kurz C90 genannt). C++ enthält C nach dem Stand C90 fast vollständig. Einige wenige C-Programme lassen sich nicht ohne weiteres als C++ kompilieren beziehungsweise haben als C++-Programme eine etwas andere Bedeutung. Dabei handelt es sich aber um Sonderfälle, die in der Praxis keine große Rolle spielen.

Die Kompatibilität mit C war eines der Hauptdesignziele bei der Entwicklung der Programmiersprache C++. Grund dafür war die große Verbreitung von C. C-Compiler sind auch heute noch für praktisch jeden Prozessor verfügbar. Deswegen gilt die Kompatibilität mit C immer noch als eine der wichtigsten Eigenschaften von C++.

Im Laufe der Entwicklung der beiden Sprachen gab es auch Rückwirkungen von C++ auf C. Beispielsweise wurden in C const sowie die Funktionsprototypen von C++ übernommen.

Die letzten Änderungen an C fanden 1999 statt (ISO/IEC 9899:1999). Gemäß dem Ratifizierungsjahr 1999 spricht man, wenn man sich auf diesen C-Stand bezieht, deshalb auch von C99. Ein Beispiel für darin eingeführte Spracherweiterungen sind die so genannten VLAs (engl. variable length array).

Aufgrund dieser Weiterentwicklung von C gibt es theoretisch mehr Inkompatibilitäten zwischen C und C++. Mittlerweile unterstützen viele Compiler diesen neuen Stand C99 in der Sprachdefinition und nicht ganz so viele auch in der Bibliothek, so dass die Bedeutung dieser Unterschiede zwischen C und C++ zunimmt. Bei der in Arbeit befindlichen C++-Version wird u. a. daran gearbeitet, die neuen C99-Merkmale mit einzuarbeiten. Einige C++-Compiler unterstützen C99-Neuerungen schon jetzt (z. B. der gcc).

Vergleich mit anderen Sprachen

C++ war nicht der einzige Ansatz, die Programmiersprache C um Eigenschaften zu erweitern, die das objektorientierte Programmieren vereinfachen. In den 1980er Jahren entstand die Programmiersprache Objective-C, die sich aber im Gegensatz zu C++ an Smalltalk und nicht an Simula orientierte. Die Syntax von Objective-C unterscheidet sich unter anderem wegen der Smalltalk-Wurzeln stark von C++. Objective-C ist weniger weit verbreitet als C++. Bekannteste Einsatzgebiete von Objective-C sind in OpenStep und Mac OS X.

Die Programmiersprachen Java und C# haben eine ähnliche, ebenfalls an C angelehnte Syntax wie C++, sind auch objektorientiert und unterstützen Typparameter, weshalb ein Vergleich mit ihnen besonders naheliegend ist.

Siehe auch: Simula, Smalltalk, Vergleich objektorientierter Programmiersprachen

In der Entwicklung befindliche Version

Im Jahr 2003 erschien eine Ergänzung des Standard (ISO/IEC 14882:2003), deren Inhalt zum C++98 gehört. C++0x (manchmal auch C++200x) ist eine inoffizielle Abkürzung für die in der Entwicklung befindliche Version der Programmiersprache C++. Zwar scheint der Name anzudeuten, dass dieser Standard bis spätestens 2009 fertig gestellt wird, es handelt sich aber lediglich um eine grobe Einschätzung des möglichen Erscheinungstermins.

Der Name „C++“

Der Name ist eine Wortschöpfung von Rick Mascitti und wurde zum ersten Mal im Dezember 1983 benutzt. Während ihrer Entstehung wurde die Sprache zuerst „C with Classes“ genannt. Der endgültige Name kommt vom Inkrement-Operator „++“, der den Wert einer Integer-Variablen um eins erhöht. (Genau betrachtet wäre der Name ++C passender für die neue Sprache gewesen.)

Zersplitterung der Sprachbenutzung, Implementierung und Spezifizierung

Im Gegensatz zu vielen anderen neueren Programmiersprachen ist C++ nur eine Spezifikation (sogar ein ISO-Standard), ohne eine Referenz-Implementierung. Das hat den Vorteil, dass man bei der Benutzung von C++ nicht an einen Hersteller gebunden wird und eine große Anzahl an Implementierungen existiert. Ein enormer Nachteil ist aber die langsame Umsetzung der Spezifikationen in den Implementierungen. Zwar entwickelt sich C++ in langsamen Schritten weiter, seit 1997 erfolgten nur noch Fehlerkorrekturen, aber dennoch dauerte es lange bis der C++-Standard weitestgehend unterstützt wurde. Heutige Inkompatibilitäten beziehen sich in der Regel nur auf das Sprachmittel „export“.

Ein weiterer Grund für die Zersplitterung der Sprache ist die lange Benutzung. C++ wurde in der Phase, in der die Sprache die größte Entwicklung erlebte, bereits sehr intensiv eingesetzt. Dies sorgte dafür, dass viele Entwickler nicht oder nur unzureichend mit neueren Eigenschaften der Sprache vertraut sind oder diese auf Grund von alten Compilern nicht einsetzen konnten. Daher sind viele Projekte, die in C++ entwickelt wurden, nicht auf dem aktuellen Stand der C++ Programmierung und sogar inkompatibel zu den aktuellen C++-Normen.

Auch der Stand vieler Lehrbücher und Lehrveranstaltungen ist veraltet. Da sich einige Compiler, wie der GCC, der C++-Sprachdefinition immer mehr annähern, stimmen Lehrinhalte oft nicht mit der Realität existierender Compiler überein.

C++-Compiler

Nachfolgend eine Auswahl von bekannten C++ Compilern (in alphabetischer Reihenfolge):

Compiler Kommentar Mit spezieller IDE Plattform
Borland C++ Builder proprietär (eine ältere Version ist kostenlos ohne IDE verfügbar) Ja Windows, Linux (Kylix)
Comeau's C++ Compiler Gilt als der Compiler, der C++ vollständig umsetzt; unterstützt zum Beispiel auch export von Templates; ist jedoch mehr ein Frontend-Compiler; proprietär (kann über das Internet ausprobiert werden) Nein Windows, Linux, Solaris/SPARC
DMC Digital Mars C/C++ Compiler Nein Windows, DOS
g++ Bestandteil der GCC; setzt ab Version 3.4 die Sprache C++ nahezu vollständig um; Freie Software Nein Unix, Linux, Mac OS X, Windows (dort auch als MinGW), AmigaOS
Intel C++ Compiler Setzt C++ nahezu vollständig um; erzeugt hocheffizienten Code für Intel-Prozessoren; proprietär Nein Windows, Linux, MacOS X
Microsoft Visual C++ Verbreitetster Compiler unter Windows; setzt ab der Version 7.1 die Sprache C++ nahezu vollständig um; proprietär; kostenlose Version mit Einschränkungen Ja Windows
Open Watcom Auch Unterstützung älterer Plattformen, bisher noch ohne vollständige C++-Standardbibliothek; Open Source Ja DOS, Windows, OS/2, Netware (Linux-Unterstützung in Arbeit)
PGI Compiler & Tools Spezielle C++- und Fortran-Compiler für High Performance Computing von The Portland Group. Nein Linux, Windows
Turbo C++ Kostenloses Basis-Packet aus dem kostenpflichtigen Turbo C++ Professional. Ja Windows

Für Kommandozeilen-Compiler, die keine spezielle integrierte Entwicklungsumgebung mitbringen, existiert eine große Zahl von unabhängigen Werkzeugen, die die Entwicklung sehr erleichtern. Eine Liste derer findet man im selbigen Artikel.

Siehe auch: Compiler, Visuelle Programmierumgebung

Siehe auch

Wikibooks: C++-Programmierung (englisch) – Lern- und Lehrmaterialien

Literatur

  • Bjarne Stroustrup: Die C++-Programmiersprache, Addison-Wesley, ISBN 3-8273-1660-X, das Standardwerk zu C++, Grundkenntnisse in C von Vorteil.
  • Andrew Koenig, Barbara E. Moo: Intensivkurs C++, Pearson Studium, ISBN 3-8273-7029-9, Anfängerbuch, ein gewisses Grundverständnis der Programmierung ist von Vorteil.
  • Scott Meyers: Effektiv C++ Programmieren – 55 Möglichkeiten, Ihre Programme und Entwürfe zu verbessern, Addison-Wesley, ISBN 3-8273-2297-9, zur Vertiefung bereits vorhandener C++-Kenntnisse.
  • Scott Meyers: Mehr Effektiv C++ programmieren – 35 neue Wege zur Verbesserung ihrer Programme und Entwürfe, Addison-Wesley, ISBN 3-8273-1275-2, Vertiefung vorhandener C++-Kenntnisse.
  • Herb Sutter: Exceptional C++, ISBN 3-8273-1711-8, Vertiefung vorhandener C++-Kenntnisse.
  • Andrei Alexandrescu: Modernes C++ Design – Generische Programmierung und Entwurfsmuster angewendet, ISBN 3-8266-1347-3, ein Standardwerk zur C++-Metaprogrammierung, setzt ein tiefes Verständnis von C++ voraus.
  • Bruce Eckel: Thinking in C++, Volume 1: Introduction to Standard C++, Prentice Hall, 2000, ISBN 0139798099, auch als kostenloses online-Buch verfügbar
  • Bruce Eckel: Thinking in C++, Vol. 2: Practical Programming, Prentice Hall, 2003, ISBN 0130353132, auch als kostenloses online-Buch verfügbar, sehr gute Beispiele als Quelltext
  1. ISO/IEC 14882:2024 - Programming languages — C++. 19. Oktober 2024.