C++ entstand ab 1979, als Bjarne Stroustrup bei den Bell Labs "C mit Klassen" entwickelte. Seit 2011 erscheint alle drei Jahre ein neuer Standard: C++11, 14, 17, 20, 23. Dieser Kurs nutzt C++20.
Eigenschaften
- Kompiliert zu schnellem Maschinencode, wie C
- Multiparadigma: prozedural, objektorientiert, generisch (Templates), funktional (Lambdas)
- Null-Overhead-Prinzip: Was du nicht nutzt, kostet nichts
- Deterministische Speicherverwaltung über Konstruktoren und Destruktoren (RAII), kein Garbage Collector
- Fast alles aus C funktioniert weiter
Wofür wird C++ genutzt?
| Bereich | Beispiele |
|---|---|
| Spiele und Grafik | Unreal Engine, viele Spiele-Engines, Vulkan/DirectX-Anwendungen |
| Browser und Anwendungen | Chrome, Firefox, Adobe-Produkte, Office |
| Datenbanken und Systeme | MySQL, MongoDB, Teile von Windows |
| Finanzen | Hochfrequenzhandel, Risikoberechnung |
| Eingebettete Systeme, Robotik, Autos | Steuergeräte, ROS |
| Wissenschaft und KI | Rechenkerne von TensorFlow und PyTorch |
Dein erstes Programm
#include <iostream>
int main() {
std::cout << "Hallo, Welt!" << std::endl;
return 0;
}Ausgabe
Hallo, Welt!
#include <iostream>bindet die Ein-/Ausgabe einstd::coutist der Ausgabestrom,<<schiebt Werte hinein,std::endl(oder'\n') beendet die Zeilestd::ist der Namensraum der Standardbibliothekmainbraucht keinreturn 0: Fehlt es, gilt automatisch0
Übersetzen
g++ -std=c++20 -Wall -Wextra -Wpedantic -O2 hallo.cpp -o hallo
./halloWie bei C: immer mit Warnungen übersetzen. Für Fehlersuche -g -fsanitize=address,undefined.
C++ im Vergleich zu C
| C | C++ | |
|---|---|---|
| Strings | char[] | std::string |
| Arrays | rohe Arrays | std::vector, std::array |
| Speicher | malloc/free | std::unique_ptr, std::vector (RAII) |
| Fehler | Rückgabewerte | Ausnahmen oder std::optional/std::expected |
| Wiederverwendung | Makros, void* | Templates, Klassen |
| Ausgabe | printf | std::cout, std::format (C++20/23) |
So führst du den Code aus: Datei hallo.cpp speichern, mit g++ -std=c++20 -Wall -Wextra hallo.cpp -o hallo übersetzen und mit ./hallo starten. Auch clang++ und Visual Studio (MSVC) funktionieren.
Merke
- C++ ist kompiliert, schnell, objektorientiert und generisch
- Aktueller Stand: C++20 (und C++23);
-std=c++20 std::cout << ...gibt aus,#include <iostream>bindet es ein- Modernes C++ nutzt
std::string,std::vectorund Smart Pointer statt roher Zeiger - RAII: Ressourcen gehören Objekten, die sie in ihrem Destruktor freigeben