C++23 ist da: Überblick über die wichtigsten Änderungen des neuen Standards
In der Welt der Programmiersprachen hat ein bedeutendes Ereignis stattgefunden – das internationale Komitee für die Standardisierung von C++ (ISO/IEC JTC1/SC22/WG21) hat offiziell eine neue Version der Sprache verabschiedet: C++23. Diese Version, die auf C++20 folgt, ist nicht revolutionär, enthält aber viele lang erwartete und nützliche Verbesserungen, die den Code sauberer, sicherer und leistungsfähiger machen. Lassen Sie uns die wichtigsten Neuerungen durchgehen.
Die wichtigsten Neuerungen in C++23
1. std::print und std::println – moderner Ersatz für cout
Dies ist wohl die auffälligste Änderung für die alltägliche Programmierung. Der Standardbibliothek wurden die Funktionen std::print und std::println hinzugefügt, die auf der leistungsstarken Formatierung von std::format (C++20) basieren. Die Konsolenausgabe ist jetzt nicht nur bequemer, sondern auch deutlich schneller als mit std::cout.
- Beispiel:
std::println("Hallo, {}! Antwort: {}", name, 42); - Vorteile: Typsicherheit, lesbare Syntax, Unicode-Unterstützung.
2. deducing this (P0847R7) – explizite Angabe von this
Eine der leistungsstärksten Neuerungen für die Metaprogrammierung und die Erstellung von Bibliotheken. Jetzt kann das Objekt this explizit als Parameter einer Member-Funktion übergeben werden. Dies löst alte Probleme mit Lambdas und CRTP (Curiously Recurring Template Pattern).
- Ermöglicht das Schreiben einer einzigen Member-Funktion, die sowohl mit const- als auch mit nicht-const-Objekten funktioniert.
- Vereinfacht die Implementierung des "Überladung nach Qualifizierern"-Musters.
3. Mehrdimensionale Operatoren operator[] (P2128R6)
Eine lang erwartete Möglichkeit – jetzt kann operator[] mehrere Argumente akzeptieren. Dies ist entscheidend für Bibliotheken, die mit mehrdimensionalen Arrays arbeiten (z. B. mdspan oder eigene Matrizen).
- Früher:
matrix(2, 3)odermatrix[{2,3}] - Jetzt:
matrix[2, 3]– natürlich und prägnant.
4. std::expected – funktionale Fehlerbehandlung
Eine Alternative zu Ausnahmen und Rückgabecodes. Der Typ std::expected<T, E> enthält entweder einen korrekten Wert oder einen Fehler. Dies ist besonders wertvoll in Systemen, in denen Ausnahmen verboten sind (eingebettete Systeme, Betriebssystemkerne).
5. Verbesserungen bei Modulen und Konzepten
Module (C++20) haben Fehlerbehebungen und eine Stabilisierung erfahren. Sie werden jetzt besser von Compilern unterstützt. Konzepte sind flexibler geworden, und es wurde die Möglichkeit hinzugefügt, auto in Konzeptparametern zu verwenden.
Was ist noch erwähnenswert?
std::mdspan– mehrdimensionaler span für die Arbeit mit Arrays.- Fehlerbehebungen in
std::ranges– Stabilisierung und Schließung von Lücken in der API. - Attribut
[[assume]]– Hinweise an den Compiler zur Optimierung. - Statische Aufrufe von
operator()– Möglichkeit