This is about computer mechanics… What happens when you take your favoured programming language and send it to the shop for a 60000 mile tune-up?— Bjarne Stroustrup1)
"Klassisches" C++98 hatte lange Bestand.2) Der Sprachstandard wird seit 2011 im 3-Jahres-Rhythmus weiterentwickelt (siehe Zeitleiste). Aktuelle Compiler unterstützen "modernes" C++113), C++144), C++175), C++206) zunehmend. Technische Spezifikationen (TS) und andere Vorschläge können in den Entwurf von C++2b oder später einfließen. Die folgenden Listen sind unvollständig und in ihrer Reihenfolge subjektiv. Es gibt viel Neues zu lernen.
… our biggest nine-year-cycle yet … in terms of new features added.— Herb Sutter7)
std::ranges::sort(v);
kombinierbare Views filter(odd) | transform(sqr) | take(3)
verarbeiten Wertfolgen "lazy"9).<coroutine>
verzahnt Prozeduren ineinander. Typen wie task<T>
oder generator<T>
fehlen leider noch10).std::format("C++{}", 20)
erleichtert die Internationalisierung.<barrier>
, <latch>
, <semaphore>
, <stoptoken>
und RAII-konforme std::jthread
(joining threads) ergänzen die Möglichkeiten zur nebenläufigen Verarbeitung. <ciso646>
zur Versionserkennung, <source_location> löst __FILE__
, __LINE__
etc. ab.for (int i=0; auto e:seq) ...
(enumerate?)struct A { int x,y,z; }; A a{.x=1, .z=3};
aus C übernommenstd::erase(container, value)
anstelle von c.erase(std::remove(c.begin(), c.end(), value), c.end())
undstd::erase_if(container, predicate)
statt c.erase(std::remove_if(c.begin(), c.end(), predicate), c.end())
für Container,If you can look at a screenful of code and tell that it’s C++17, then we’ve changed the way we program C++.— Herb Sutter11)
std::pair p{1, 'a'}; // pair<int,char> auto [n, c] = p; // structured bindings for (auto [key, value] : mymap) /* ... */; if (auto [it, success] = mymap.insert(value); success) use(it);
for
-Anweisungen sowie if
und switch
, die um einen Initialisierungsteil erweitert wurden.void*
und union
namespace A::B {…}
für namespace A { namespace B {…} }
if constexpr (expression)
erleichtert das Schreiben von Funktionsschablonen ohne SFINAE-Tricks. [unordered_][multi_]set|map
und set1.merge(set2)
zum Verschmelzen assoziativer Containerauto answer{42};
ist nun endlich eine Ganzzahl.…completes C++11.
0b101010
und Stellentrennzeichen 1'234'567
make_unique()
, const
-iterator
-Funktionen cbegin()
, cend()
It feels like a new language.— Bjarne Stroustrup
>>
am Ende verschachtelter Templates ohne Leerzeichen dazwischen, variadische TemplatesDie englischsprachige C++ Reference listet Technical Specifications (TS) und Entwürfe (PDTS/DTS = [Proposed] Draft Technical Specification) auf, darunter:
action::sort
, unique
, enumerate
, zip
oder to<std::vector>
fehlen. Siehe auch: rangesnext.<experimental/generator>
.
std::chrono::nanoseconds{7.2e18}
. Die Mühlen des ISO-C++-Komitees mahlen langsam. To Sheldon Cooper: No sarcasm sign here.