Neue C++-Version veröffentlicht: Was sich geändert hat
Die C++-Entwicklergemeinschaft hat ein lang erwartetes Update der Sprache erhalten. Der neue Standard, der C++20 ablöst, bringt eine Reihe bedeutender Änderungen mit sich, die auf Codevereinfachung, Leistungssteigerung und verbesserte Sicherheit abzielen. In diesem Artikel besprechen wir die wichtigsten Neuerungen, die bereits in den wichtigsten Compilern (GCC, Clang, MSVC) verfügbar sind.
Wichtige Neuerungen
Die neue C++-Version ist nicht revolutionär, aber sie verfeinert die in früheren Versionen angelegten Mechanismen erheblich. Der Schwerpunkt liegt auf der Verbesserung der Modularität, der Speicherverwaltung und der Standardbibliothek.
- Module (Modules) – stabile Implementierung. Waren Module in C++20 noch experimentell, sind sie nun vollständig für die Produktion bereit. Module ermöglichen es, traditionelle Header-Dateien (.h) zu ersetzen, was die Kompilierung beschleunigt und Probleme mit Makros und der Include-Reihenfolge beseitigt.
- Erweiterung von std::expected. Dieser aus Boost stammende Typ ist nun offiziell Teil des Standards. Er ermöglicht es, aus einer Funktion entweder einen erwarteten Wert oder einen Fehler zurückzugeben, ohne auf Ausnahmen zurückzugreifen. Dies macht den Code in systemnahen Umgebungen vorhersagbarer und leistungsfähiger.
- std::print und std::println. Der lang erwartete Ersatz für printf und std::cout. Der neue Mechanismus für formatierte Ausgabe ist vollständig typsicher, erfordert keine C-artigen Formatspezifizierer und arbeitet durch Optimierung zur Kompilierzeit schneller.
- Verbesserte Coroutinen (Coroutines). Unterstützung für
std::generatorwurde hinzugefügt – ein synchroner Generator, der das einfache Erstellen von faulen Sequenzen ohne das Schreiben von komplexem Boilerplate-Code ermöglicht.
Änderungen in der Standardbibliothek
Die Standardbibliothek (STL) hat viele kleine, aber nützliche Ergänzungen erhalten. Entwickler sollten auf folgende Punkte achten:
- std::mdspan – ein mehrdimensionaler Array-View ohne Datenbesitz. Ideal für die Arbeit mit Matrizen, Bildern und wissenschaftlichen Berechnungen.
- std::flat_map und std::flat_set – Container, die auf Basis eines sortierten Vektors implementiert sind. Sie verbrauchen weniger Speicher als std::map und sind bei Iterationen schneller.
- std::stacktrace – integrierte Unterstützung für Stacktraces. Nun müssen keine externen Bibliotheken mehr für die Fehlerdiagnose in der Produktion eingebunden werden.
- Verbesserte Arbeit mit Zeichenketten: Neue Methoden für die Arbeit mit UTF-8 und Unterstützung für konstante Zeichenketten zur Kompilierzeit wurden hinzugefügt.
Leistungs- und Sicherheitsverbesserungen
Der neue Standard setzt den Kurs für sicheres Speichermanagement fort. Das Attribut [[indeterminate]] wurde eingeführt, das den Compiler warnt, dass eine Variable möglicherweise nicht initialisiert ist – dies hilft, potenzielle Fehler bereits zur Build-Zeit zu erkennen.
Ebenfalls verbessert wurde die Unterstützung für Konzepte (Concepts). Sie arbeiten nun schneller, und Kompilierungsfehler sind lesbarer geworden. Entwickler können strengere Einschränkungen für Templates schreiben, ohne die Leistung des resultierenden Codes zu beeinträchtigen.
Was bedeutet das für Entwickler?
Wenn Sie in C++ programmieren und moderne Compiler (GCC 14+, Clang 18+, MSVC 2024+) verwenden, können Sie bereits jetzt damit beginnen, die neuen Funktionen einzusetzen. Besonders empfehlenswert sind std::print (es beschleunigt die Log-Ausgabe merklich) und std::expected (vereinfacht die Fehlerbehandlung).