C++26: Ein gewaltiger Sprung für Compile-Time-Funktionen der Standardbibliothek

2025-05-01

C++26 steht kurz davor, die Compile-Time-Programmierung mit einem enormen Schub an constexpr-Unterstützung in der Standardbibliothek zu revolutionieren. Mehrere Vorschläge (P2562R1, P1383R2, P3074R7, P3372R2, P3508R0, P3369R0) integrieren stabile Sortieralgorithmen, - und -Funktionen, verbesserte Union-Regeln, fast alle Container und Adapter sowie spezialisierte Speicheralgorithmen in den constexpr-Bereich. Dies verbessert die Compile-Time-Fähigkeiten erheblich und ermöglicht beispielsweise das Sortieren von constexpr-Containern zur Compile-Time. Obwohl std::hive und std::hash aufgrund von Einschränkungen ausgeschlossen bleiben, verspricht C++26 eine dramatische Erweiterung der Möglichkeiten der Compile-Time-Programmierung.

Mehr lesen
Entwicklung

C++26: Ein Quantensprung für constexpr

2025-04-23

C++26 wird constexpr revolutionieren! Kommende Features beinhalten constexpr-Casts von void*, die eine flexiblere Speichermanipulation zur Compilezeit ermöglichen; constexpr placement new, das das Platzieren von Objekten in konstanten Ausdrücken erlaubt; und constexpr strukturierte Bindungen, die strukturierte Bindungen zur Compilezeit einführen. Diese Verbesserungen erweitern den Umfang von constexpr drastisch und verleihen der Standardbibliothek deutlich verbesserte Compilezeit-Fähigkeiten.

Mehr lesen
Entwicklung Compilezeitberechnung

C++20 Ranges Performance: Eine überraschende Wendung

2025-04-19

Der Autor ersetzte eine einfache Schleife durch `std::ranges::transform` in einem C++-Projekt und erwartete eine Performance-Steigerung. Tests ergaben ein überraschendes Ergebnis: Eine optimierte einfache Schleife (mit `emplace_back` und `reserve`) war 20% schneller unter Clang und 10% schneller unter GCC. Der Artikel vergleicht verschiedene Ansätze und hebt Performance und Lesbarkeit des Codes hervor. Fazit: Priorisieren Sie Lesbarkeit, es sei denn, die Performance ist ein kritischer Engpass.

Mehr lesen
Entwicklung

C++26: Entfernte und veraltete Features im Überblick

2025-03-20

C++26 entfernt oder deklariert mehrere Features als veraltet. Dazu gehören die vollständige Entfernung des in C++20 veralteten `std::allocator`-typedef und der parameterlosen Überladung von `std::basic_string::reserve()`; die Entfernung veralteter Unicode-Konvertierungstools und von `std::strtok`; die Entfernung veralteter `strstreams` und der atomaren Zugriffs-APIs von `std::shared_ptr`; sowie die Entfernung von `std::wstring_convert`. Zusätzlich wird `std::is_trivial` als veraltet markiert, wobei die Verwendung der präziseren `is_trivially_XXX`-Alternativen empfohlen wird; und `std::memory_order::consume` wird aufgrund einer unbefriedigenden Spezifikation und Implementierungsschwierigkeiten als veraltet markiert. Diese Entfernungen und Deklarationen als veraltet sollen die Sprachsicherheit und -effizienz verbessern und veraltete Funktionen bereinigen.

Mehr lesen

C++26: Pack-Indizierung vereinfacht die Extraktion von Elementen

2025-01-24

Während C++11 Parameterpakete einführte, blieb die Extraktion spezifischer Elemente umständlich. C++26 führt dank des Vorschlags P2662R3 die Pack-Indizierung ein, die den direkten Zugriff auf Pack-Elemente über den Indexoperator ermöglicht, z. B. `T...[0]` für das erste Element. Dies führt zu saubererem, lesbarerem Code und verbesserter Compile-Zeit-Performance. Obwohl negative Indizierung und Slicing noch nicht unterstützt werden, ist das Feature bereits sehr nützlich und verbessert die C++-Entwicklung deutlich.

Mehr lesen

C++26: Der namenlose Platzhalter '_' kommt

2025-01-11

C++26 führt ein bahnbrechendes Feature ein: den namenlosen Platzhalter '_'. Dies löst ein langjähriges Problem in C++: die Behandlung von unbenutzten Variablen. Bisher mussten Entwickler `[[maybe_unused]]` oder `std::ignore` verwenden, um Compiler-Warnungen zu vermeiden, besonders bei strukturierten Bindungen. Der Platzhalter '_' kann mehrfach deklariert werden, ohne Konflikte zu verursachen, und besitzt implizit das Attribut `[[maybe_unused]]`, was den Code vereinfacht und die Lesbarkeit verbessert. Diese Funktion ist bereits in GCC 14 und Clang 18 implementiert.

Mehr lesen