Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
modern_cpp [2024-02-08 16:43] – [C++23] rrichter | modern_cpp [2025-03-09 16:01] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 18.220.135.245 |
---|
)), | )), |
[[#C++23]](( | [[#C++23]](( |
https://github.com/steve-downey/papers/blob/master/wg21-status.org (2022-06-15),\\ | ISO International Standard ISO/IEC 14882:2024(en) – Programming Language C++. (2024-10).\\ |
https://wg21.link/n4917 Working Draft (PDF) (2022-09-05),\\ | Frei zugänglich: Final Working Draft [[https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf|N4950]] (2023-05-10).\\ |
https://herbsutter.com/2022/11/12/trip-report-autumn-iso-c-standards-meeting-kona/ (2022-11-12). | https://herbsutter.com/2022/11/12/trip-report-autumn-iso-c-standards-meeting-kona/ (2022-11-12),\\ |
| S.M.Downey: We will all ignore the 2024, yes? https://www.reddit.com/r/cpp/comments/1g7jpbt/isoiec_148822024/ (2024-10-20). |
)) | )) |
zunehmend. | zunehmend. |
können in den nächsten [[https://github.com/cplusplus/draft|Entwurf]] einfließen. | können in den nächsten [[https://github.com/cplusplus/draft|Entwurf]] einfließen. |
Die folgenden Listen sind unvollständig und in ihrer Reihenfolge subjektiv. | Die folgenden Listen sind unvollständig und in ihrer Reihenfolge subjektiv. |
| |
| ===== C++26 ===== |
| > |
| > --- |
| |
| * Unterstrich als Platzhalter für unbenutzte Variablen: ''auto [x,_,z] = f();'' |
| |
===== C++23 ===== | ===== C++23 ===== |
| |
* ''import std;'' für Module der Standard-Bibliothek | * ''import std;'' für Module der Standard-Bibliothek |
* ranges: Temporäre Werte in range-based for leben länger ([[https://wg21.link/p2644|P2644]]). | * [[kennen:include:ranges]]: Temporäre Werte in range-based for leben länger ([[https://wg21.link/p2644|P2644]]). |
* ''std::ranges::to<Container>'', ''std::views::enumerate''((Inbal Levi: https://www.slideshare.net/InbalLevi5/isockona2022tripreportpptx (2023-01-17).)) und weitere Adapter: ''as_const'', ''as_rvalue'', ''cartesian_product'', ''chunk[_by]'', ''join_with'', ''repeat'', ''slide'', ''stride'', ''adjacent[_transform]'', ''pairwise[_transform]'', ''zip[_transform]'' | * an Python angelehnte Ausgabe mit ''format()'' ([[https://wg21.link/p2286|P2286]]) |
| * ''std::ranges::to<Container>'' ([[https://wg21.link/p1206r7|P1206]]) |
| * ''std::views::enumerate''((Inbal Levi: https://www.slideshare.net/InbalLevi5/isockona2022tripreportpptx (2023-01-17).)), ''as_const'', ''as_rvalue'', ''cartesian_product'', ''chunk[_by]'', ''join_with'', ''repeat'', ''slide'', ''stride'', ''adjacent[_transform]'', ''pairwise[_transform]'', ''zip[_transform]'' |
* Algorithmen: ''iota()'', ''shift_left()'', ''shift_right()'', ''starts_with()'', ''ends_with()'', ''contains()'', ''fold()'' | * Algorithmen: ''iota()'', ''shift_left()'', ''shift_right()'', ''starts_with()'', ''ends_with()'', ''contains()'', ''fold()'' |
* an Python angelehnte Ausgabe mit ''format()'' | * [[kennen:include:generator|std::generator<T>]] für Coroutinen |
* ''std::generator<T>'' für Coroutinen | * [[kennen:include:print|std::print()]] wirkt wie ''%%std::cout << format()%%'', ''std::println()'', formatierte Ausgabe für Ranges |
* ''std::print()'' wirkt wie ''%%std::cout << format()%%'', ''std::println()'', formatierte Ausgabe für Ranges | |
* ''s.contains("C++")'' für ''string'' und ''string_view'' | * ''s.contains("C++")'' für ''string'' und ''string_view'' |
* ''std::mdspan'': mehrdimensionale Feldindizes ''a[i,j]'' | * ''std::mdspan'': mehrdimensionale Feldindizes ''a[i,j]'' |
* ''std::expected<Result,Error>'' und ''std::optional<T>'' mit monadischen Operationen ''transform()'', ''and_then()'', ''or_else()'' | * [[kennen:include:expected|std::expected<Result,Error>]] und ''std::optional<T>'' mit monadischen Operationen ''transform()'', ''and_then()'', ''or_else()'' |
* Quelltext in UTF-8 zulässig, Unicode Annex 31 für Bezeichner: ''int 💩 = 23;'' | * Quelltext in UTF-8 zulässig, Unicode Annex 31 für Bezeichner: ''int 💩 = 23;'' |
* Literalsuffix (vorzeichenloser) ''size_t'': ''for (auto i = 0zu, s = v.size(); i < s; ++i) ...'' | * Literalsuffix (vorzeichenloser) ''size_t'': ''for (auto i = 0zu, s = v.size(); i < s; ++i) ...'' |
* cachefreundliche Container ''std::flat_[multi]map<K,V>'', ''std::flat_[multi]set<T>'' | * cachefreundliche Container ''std::flat_[multi]map<K,V>'', ''std::flat_[multi]set<T>'' |
* ''std::stacktrace'' hilft bei der Fehlersuche. | * [[kennen:include:stacktrace|std::stacktrace]] hilft bei der Fehlersuche. |
| |
===== C++20 ===== | ===== C++20 ===== |
[[https://devblogs.microsoft.com/cppblog/standard-c20-modules-support-with-msvc-in-visual-studio-2019-version-16-8/|Visual C++]] und | [[https://devblogs.microsoft.com/cppblog/standard-c20-modules-support-with-msvc-in-visual-studio-2019-version-16-8/|Visual C++]] und |
[[https://gcc.gnu.org/wiki/cxx-modules|GCC]] | [[https://gcc.gnu.org/wiki/cxx-modules|GCC]] |
experimentieren mit Modulen: [[howto:modules_gcc11|Beispiel mit g++ 11]], | experimentieren mit Modulen: [[howto:module_std_gcc15|Beispiel mit g++ 11]], |
[[https://github.com/royjacobson/modules-report|C++20 Modules Status Report]]. | [[https://github.com/royjacobson/modules-report|C++20 Modules Status Report]]. |
)) überwinden Probleme des ''#include''-Mechanismus (Präprozessor, Makros). ''import''-Anweisungen beschleunigen das Übersetzen, übergangsweise auch ''import <iostream>;'' Die Modularisierung der Standard-Bibliothek erfolgt erst mit C++23 ([[https://wg21.link/P0581|P0581]]). | )) überwinden Probleme des ''#include''-Mechanismus (Präprozessor, Makros). ''import''-Anweisungen beschleunigen das Übersetzen, übergangsweise auch ''import <iostream>;'' Die Modularisierung der Standard-Bibliothek erfolgt erst mit C++23 ([[https://wg21.link/P0581|P0581]]). |