namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


modern_cpp

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modern_cpp [2020-06-28 13:28]
rrichter [C++20]
modern_cpp [2020-07-12 16:18] (aktuell)
rrichter [C++20]
Zeile 2: Zeile 2:
  
 > // 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? // > // 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 Stroustrup ((Bjarne Stroustrup: C++0x Initialization Lists. ​+>> ​ --- Bjarne Stroustrup((Bjarne Stroustrup: C++0x Initialization Lists. ​
 [[http://​video.google.com/​videoplay?​docid=5262479012306588324|Google Tech Talk]] (2007-02-21).)) [[http://​video.google.com/​videoplay?​docid=5262479012306588324|Google Tech Talk]] (2007-02-21).))
  
-Der erste Sprachstandard ​[[..:​kennen:​begriffe#​C++98]] ​+"​Klassisches" ​[[..:​kennen:​begriffe#​C++98]]
 hatte lange Bestand.(( hatte lange Bestand.((
  ISO International Standard ISO/IEC 14882:​1998(E) – Programming Language C++. (1989-09).\\ ​  ISO International Standard ISO/IEC 14882:​1998(E) – Programming Language C++. (1989-09).\\ ​
Zeile 11: Zeile 11:
  ​Technical Report on C++ library extensions. [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2005/​n1836.pdf |N1836]], (2005).  ​Technical Report on C++ library extensions. [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2005/​n1836.pdf |N1836]], (2005).
 ))  )) 
-Seit 2011 wird C++ im 3-Jahres-Rhythmus weiterentwickelt. +Der Sprachstandard ​wird seit 2011 im 3-Jahres-Rhythmus weiterentwickelt ​(siehe [[https://​isocpp.org/​std/​status|Zeitleiste]])
-Aktuelle [[Compiler]] unterstützen modernes+Aktuelle [[Compiler]] unterstützen ​"modernes"
 [[#​C++11]](( [[#​C++11]]((
  Frei zugänglich:​ ISO C++ Working Draft (C++11 WD) = ISO Standard C++ 2011 +  Frei zugänglich:​ ISO C++ Working Draft (C++11 WD) = ISO Standard C++ 2011 +
Zeile 32: Zeile 32:
 DIS N4860. Frei zugänglich:​ Working Draft [[http://​open-std.org/​JTC1/​SC22/​WG21/​docs/​papers/​2020/​n4861.pdf|N4861]] (2020-04-01). DIS N4860. Frei zugänglich:​ Working Draft [[http://​open-std.org/​JTC1/​SC22/​WG21/​docs/​papers/​2020/​n4861.pdf|N4861]] (2020-04-01).
 )) ))
-zunehmend ​([[https://​isocpp.org/​std/​status|Zeitleiste]]).+zunehmend.
 [[#​Technische Spezifikationen]] (TS) [[#​Technische Spezifikationen]] (TS)
 und andere Vorschläge und andere Vorschläge
-können in den [[https://​github.com/​cplusplus/​draft|Entwurf]] ​des künftigen Standards ​C++2b oder später einfließen. ​+können in den [[https://​github.com/​cplusplus/​draft|Entwurf]] ​von [[kennen:​begriffe#​C++2b]] oder später einfließen. ​
 Die folgenden Listen sind unvollständig und in ihrer Reihenfolge subjektiv. Die folgenden Listen sind unvollständig und in ihrer Reihenfolge subjektiv.
 +Es gibt viel Neues zu lernen.
 ===== C++11 ===== ===== C++11 =====
 > // It feels like a new language. // > // It feels like a new language. //
Zeile 46: Zeile 46:
   * [[kennen:​Klassen#​Attribute|Attribut-Initialisierung]]:​ Startwerte für Member-Variablen,​ zu- und abschaltbare [[kennen:​spezielle_Methoden#​default_und_delete|spezielle Methoden]], [[kennen:​Klassen#​Konstruktor-Delegation]]   * [[kennen:​Klassen#​Attribute|Attribut-Initialisierung]]:​ Startwerte für Member-Variablen,​ zu- und abschaltbare [[kennen:​spezielle_Methoden#​default_und_delete|spezielle Methoden]], [[kennen:​Klassen#​Konstruktor-Delegation]]
   * [[kennen:​begriffe#​Rvalue-Referenz|Rvalue-Referenzen]]:​ Unterscheidung von Kopier- und [[kennen:​begriffe#​Verschiebesemantik]]   * [[kennen:​begriffe#​Rvalue-Referenz|Rvalue-Referenzen]]:​ Unterscheidung von Kopier- und [[kennen:​begriffe#​Verschiebesemantik]]
-  * ''​%%>>​%%''​ am Ende verschachtelter Templates ​(ohne Leerzeichen dazwischen), variadische Templates+  * ''​%%>>​%%''​ am Ende verschachtelter Templates ohne Leerzeichen dazwischen, variadische Templates
   * [[kennen:​sprachkern#​zeichen_und_zeichenketten|raw strings]], ''​nullptr''​ statt Ganzzahl 0, [[kennen:​attributspezifizierer]]   * [[kennen:​sprachkern#​zeichen_und_zeichenketten|raw strings]], ''​nullptr''​ statt Ganzzahl 0, [[kennen:​attributspezifizierer]]
   * Bibliotheken für   * Bibliotheken für
Zeile 66: Zeile 66:
   * automatisches Erkennen des Ergebnistyps von Funktionen, [[kennen:​lambda#​generische Lambda-Ausdrücke]] und [[kennen:​lambda#​Lambda-capture-Ausdrücke]]   * automatisches Erkennen des Ergebnistyps von Funktionen, [[kennen:​lambda#​generische Lambda-Ausdrücke]] und [[kennen:​lambda#​Lambda-capture-Ausdrücke]]
   * Variablen-Templates   * Variablen-Templates
-  * ''​make_unique()'',​ const-iterator-Funktionen ''​cbegin()'',​ ''​cend()''​ +  * ''​make_unique()'', ​''​const''​-''​iterator''​-Funktionen ''​cbegin()'',​ ''​cend()''​ 
-  * Funktionsobjekte [[..:​kennen:​stl#​Funktionsadapter|greater<>​]] ohne Typangabe möglich+  * Funktionsobjekte [[..:​kennen:​stl#​Funktionsadapter|std::greater<>​]] ohne Typangabe möglich
   * [[..:​kennen:​lib:​quoted|std::​quoted(s)]] für Ein- und Ausgabe von Zeichenketten mit Begrenzungszeichen ("​Gänsefüßchen"​)   * [[..:​kennen:​lib:​quoted|std::​quoted(s)]] für Ein- und Ausgabe von Zeichenketten mit Begrenzungszeichen ("​Gänsefüßchen"​)
  
Zeile 82: Zeile 82:
     if (auto [it, success] = mymap.insert(value);​ success) use(it);     if (auto [it, success] = mymap.insert(value);​ success) use(it);
  
-  * Erschließen von Template-Argumenten aus Konstruktorparametern macht Hilfsfunktionen wie [[..:​kennen:​lib:​make_pair]] und [[..:​kennen:​lib:​make_tuple]] überflüssig.  +  * Erschließen von Template-Argumenten aus Konstruktorparametern ​([[kennen:​begriffe#​CTAD]]) ​macht Hilfsfunktionen wie [[..:​kennen:​lib:​make_pair]] und [[..:​kennen:​lib:​make_tuple]] überflüssig.  
-  * "Structured bindings"(("​destructuring declaration"​ in [[https://​kotlinlang.org/​docs/​reference/​multi-declarations.html|Kotlin]], ​+  * [[kennen:​begriffe#​Structured bindings]](("​destructuring declaration"​ in [[https://​kotlinlang.org/​docs/​reference/​multi-declarations.html|Kotlin]], ​
 "​destructuring assignment"​ in [[https://​developer.mozilla.org/​en-US/​docs/​Web/​JavaScript/​Reference/​Operators/​Destructuring_assignment|Javascript]],​ "​destructuring assignment"​ in [[https://​developer.mozilla.org/​en-US/​docs/​Web/​JavaScript/​Reference/​Operators/​Destructuring_assignment|Javascript]],​
-"tuple assignment"/"​unpacking"​ in [[http://​interactivepython.org/​runestone/​static/​thinkcspy/​Lists/​TupleAssignment.html|Python]])) ​"entpacken" ​zusammengesetzte Werte, auch in ''​for''​-Anweisungen sowie ''​if''​ und ''​switch'',​ die um einen Initialisierungsteil erweitert wurden.+"tuple assignment"/"​unpacking"​ in [[http://​interactivepython.org/​runestone/​static/​thinkcspy/​Lists/​TupleAssignment.html|Python]])) entpacken zusammengesetzte Werte, auch in ''​for''​-Anweisungen sowie ''​if''​ und ''​switch'',​ die um einen Initialisierungsteil erweitert wurden.
   * [[..:​kennen:​include:​filesystem]]:​ Zugriff auf das Dateisystem ​   * [[..:​kennen:​include:​filesystem]]:​ Zugriff auf das Dateisystem ​
   * [[..:​kennen:​include:​optional|std::​optional<​T>​]] als Kapsel für ein evtl. vorhandenes Objekt, [[..:​kennen:​include:​any|std::​any]] und [[..:​kennen:​include:​variant|std::​variant<​T1,​...,​Tn>​]] als typsicherer Ersatz für ''​void*''​ und ''​union''​   * [[..:​kennen:​include:​optional|std::​optional<​T>​]] als Kapsel für ein evtl. vorhandenes Objekt, [[..:​kennen:​include:​any|std::​any]] und [[..:​kennen:​include:​variant|std::​variant<​T1,​...,​Tn>​]] als typsicherer Ersatz für ''​void*''​ und ''​union''​
-  * [[..:​kennen:​include:​string_view|std::​string_view]] als einheitliche lesende Schnittstelle zur Inspektion von [[..:​kennen:​include:​string|std::​string]] und anderen Zeichenketten ​(Library Fundamentals v1) +  * [[..:​kennen:​include:​string_view|std::​string_view]] als einheitliche lesende Schnittstelle zur Inspektion von [[..:​kennen:​include:​string|std::​string]] und anderen Zeichenketten[[..:​kennen:​include:​cstddef|std::​byte]] für Bitoperationen
-  * [[..:​kennen:​include:​cstddef|std::​byte]] für Bitoperationen+
   * [[wpde>​Größter gemeinsamer Teiler|ggT]] und [[wpde>​Kleinstes gemeinsames Vielfaches|kgV]] benötigten 2300 Jahre((> ''​std::​chrono::​nanoseconds{7.2e18}''​. Die Mühlen des ISO-C++-Komitees mahlen langsam. To [[wp>​Sheldon Cooper]]: No sarcasm sign here.   * [[wpde>​Größter gemeinsamer Teiler|ggT]] und [[wpde>​Kleinstes gemeinsames Vielfaches|kgV]] benötigten 2300 Jahre((> ''​std::​chrono::​nanoseconds{7.2e18}''​. Die Mühlen des ISO-C++-Komitees mahlen langsam. To [[wp>​Sheldon Cooper]]: No sarcasm sign here.
 )) aus den [[wpde>​Elemente_(Euklid)|Elementen]] nach C++: [[..:​kennen:​lib:​gcd|std::​gcd(m,​n)]]''​*''​[[..:​kennen:​lib:​lcm|std::​lcm(m,​n)]]''​ == m*n''​ )) aus den [[wpde>​Elemente_(Euklid)|Elementen]] nach C++: [[..:​kennen:​lib:​gcd|std::​gcd(m,​n)]]''​*''​[[..:​kennen:​lib:​lcm|std::​lcm(m,​n)]]''​ == m*n''​
-  * Pythagoras in 3D[[..:​kennen:​lib:​hypot|std::​hypot(x,​y,​z)]],​ Wertbegrenzung [[..:​kennen:​lib:​clamp|std::​clamp(x,​1,​10)]] und zufällige Stichproben einer Sequenz [[..:​kennen:​lib:​sample|std::​sample(first,​ last, out, n, rng)]]+  * Pythagoras in 3D [[..:​kennen:​lib:​hypot|std::​hypot(x,​y,​z)]],​ Wertbegrenzung [[..:​kennen:​lib:​clamp|std::​clamp(x,​1,​10)]] und zufällige Stichproben einer Sequenz [[..:​kennen:​lib:​sample|std::​sample(first,​ last, out, n, rng)]]
   * [[kennen:​parallel_algorithms|parallelisierte Algorithmen]] und [[..:​kennen:​include:​cmath#​spezielle_funktionen|"​spezielle"​ mathematische Funktionen]]:​ elliptische Integrale, Kugel- und Zylinderfunktionen,​ Hermite-, ​ Laguerre-, Legendre-Polynome...   * [[kennen:​parallel_algorithms|parallelisierte Algorithmen]] und [[..:​kennen:​include:​cmath#​spezielle_funktionen|"​spezielle"​ mathematische Funktionen]]:​ elliptische Integrale, Kugel- und Zylinderfunktionen,​ Hermite-, ​ Laguerre-, Legendre-Polynome...
   * geschachtelte Namensräume ''​namespace A::B {...}''​ für ''​namespace A { namespace B {...} }''​   * geschachtelte Namensräume ''​namespace A::B {...}''​ für ''​namespace A { namespace B {...} }''​
   * ''​if constexpr (expression)''​ erleichtert das Schreiben von Funktionsschablonen ohne [[..kennen:​begriffe#​SFINAE]]-Tricks. ​   * ''​if constexpr (expression)''​ erleichtert das Schreiben von Funktionsschablonen ohne [[..kennen:​begriffe#​SFINAE]]-Tricks. ​
   * Umhängen von einzelnen Knoten zwischen ''​[unordered_][multi_]set|map''​ und ''​set1.merge(set2)''​ zum Verschmelzen assoziativer [[kennen:​stl#​Container]]   * Umhängen von einzelnen Knoten zwischen ''​[unordered_][multi_]set|map''​ und ''​set1.merge(set2)''​ zum Verschmelzen assoziativer [[kennen:​stl#​Container]]
-  * Funktionsargumente werden stets v.l.n.r. ausgewertet,​ unnötige Kopien garantiert vermieden (copy elision), C11 wird Schwestersprache ​statt C99. +  * Funktionsargumente werden stets v.l.n.r. ausgewertet,​ unnötige Kopien garantiert vermieden (copy elision), C11 statt C99 wird Schwestersprache
-  * Regeln ​für [[kennen:​initialisiererliste]] geändert: ''​auto ​n{42}; %%//%% is int''​ +  * Die Regeln ​der [[kennen:​initialisiererliste]] ​wurden ​geändert: ''​auto ​answer{42};'' ​ist nun endlich eine Ganzzahl.
     ​     ​
 ===== C++20 ===== ===== C++20 =====
Zeile 105: Zeile 103:
 >> --- Herb Sutter((Herb Sutter: [[https://​herbsutter.com/​2019/​02/​23/​trip-report-winter-iso-c-standards-meeting-kona/​| Winter ISO C++ standards meeting (Kona)]] (2019-02-23). )) >> --- Herb Sutter((Herb Sutter: [[https://​herbsutter.com/​2019/​02/​23/​trip-report-winter-iso-c-standards-meeting-kona/​| Winter ISO C++ standards meeting (Kona)]] (2019-02-23). ))
  
-  * Module((Compiler und Build-Infrastruktur erfordern Änderungen. ​+  * [[kennen:Module]]((Compiler und Build-Infrastruktur erfordern Änderungen. ​
 [[https://​clang.llvm.org/​docs/​Modules.html|Clang]], ​ [[https://​clang.llvm.org/​docs/​Modules.html|Clang]], ​
 [[https://​devblogs.microsoft.com/​cppblog/​cpp-modules-in-visual-studio-2017/​|Visual C++]] und [[https://​devblogs.microsoft.com/​cppblog/​cpp-modules-in-visual-studio-2017/​|Visual C++]] und
 [[https://​gcc.gnu.org/​wiki/​cxx-modules|GCC]] [[https://​gcc.gnu.org/​wiki/​cxx-modules|GCC]]
 experimentieren mit Modulen. experimentieren mit Modulen.
-)) überwinden ​die Aufteilung in Header (*.h) und Implementierungsdatei (*.cpp), beschleunigen das Übersetzen. Der ''#​include''​-Mechanismus ​wird durch ''​import''​-Anweisungen ​ersetzt, übergangsweise auch ''​import <​iostream>;''​ [[https://​wg21.link/​P0581|P0581]] schlägt vor, die Standard-Bibliothek zu modularisieren. +)) überwinden ​Probleme des ''#​include''​-Mechanismus''​import''​-Anweisungen ​beschleunigen das Übersetzen, übergangsweise auch ''​import <​iostream>;''​ [[https://​wg21.link/​P0581|P0581]] schlägt vor, die Standard-Bibliothek zu modularisieren. 
-  * [[kennen:​include:​ranges]] modernisiert [[kennen:​include:​algorithm]],​ z.B. ''​std::​ranges::​sort(v);'' ​Kombinierbare ​Views ''​filter(odd) | transform(sqr) | take(3)''​ verarbeiten Wertfolgen "​lazy"​((Von [[https://​github.com/​ericniebler/​range-v3|ranges-v3]] wurde (bisher) nur eine kleine Auswahl übernommen. Wichtige, nützliche Bausteine wie ''​action::​sort'',​ ''​unique'',​ ''​enumerate'',​ ''​zip''​ oder ''​to<​std::​vector>''​ fehlen.)). +  * [[kennen:​include:​ranges]] modernisiert [[kennen:​include:​algorithm]],​ z.B. ''​std::​ranges::​sort(v);'' ​kombinierbare ​Views ''​filter(odd) | transform(sqr) | take(3)''​ verarbeiten Wertfolgen "​lazy"​((Von [[https://​github.com/​ericniebler/​range-v3|ranges-v3]] wurde (bisher) nur eine kleine Auswahl übernommen. Wichtige, nützliche Bausteine wie ''​action::​sort'',​ ''​unique'',​ ''​enumerate'',​ ''​zip''​ oder ''​to<​std::​vector>''​ fehlen.)). 
-  * [[kennen:include:​concepts]] ​[[kennen:​concepts|beschränken]] dabei Schablonen, erleichtern Compilern die Auswahl der passenden Funktion, ersparen [[kennen:​begriffe#​SFINAE]]-Tricks und sorgen für hilfreichere Fehlermeldungen,​ falls ''​v''​ nicht sortierbar ist.  +  * [[kennen:​concepts]] beschränken Schablonen, ersparen [[kennen:​begriffe#​SFINAE]]-Tricks, erleichtern den Compilern die Auswahl der passenden generischen Funktion ​und sorgen für hilfreichere Fehlermeldungen,​ falls ''​v''​ nicht sortierbar ist. Generische ​Funktionen mit ''​auto''​-Parametern sind auch ohne den Vorsatz ''​template ...''​ Schablonen. 
-  * Funktionen mit ''​auto''​-Parametern sind auch ohne den Vorsatz ''​template ...''​ Schablonen. +  * ''<​coroutine>''​ verzahnt Prozeduren ineinander. Typen wie ''​task<​T>''​ oder ''​generator<​T>''​ fehlen leider noch in der Bibliothek((Bibliothek [[https://​github.com/​lewissbaker/​cppcoro|cppcoro]] nutzen oder selbst programmieren,​ siehe [[https://​wg21.link/​p2168|P2168R0]]. Visual C++ bietet ''<​experimental/​generator>''​.)).
-  * ''<​coroutine>''​ verzahnt Prozeduren ineinander. Typen wie ''​task<​T>''​ oder ''​generator<​T>''​ fehlen leider noch in der Bibliothek((Bibliothek [[https://​github.com/​lewissbaker/​cppcoro|cppcoro]] nutzen oder selbst programmieren,​ siehe [[https://​wg21.link/​p2168|P2168R0]])).+
   * ''<​format>'':​ typsichere, schnelle und flexible Aufbereitung von Ausgaben: ''​std::​format("​C++{}",​ 20)''​   * ''<​format>'':​ typsichere, schnelle und flexible Aufbereitung von Ausgaben: ''​std::​format("​C++{}",​ 20)''​
   * [[kennen:​include:​chrono]] erhält [[https://​mariusbancila.ro/​blog/​2018/​03/​27/​cpp20-calendars-and-time-zones/​|Zeitzonen und Kalender]]. ​   * [[kennen:​include:​chrono]] erhält [[https://​mariusbancila.ro/​blog/​2018/​03/​27/​cpp20-calendars-and-time-zones/​|Zeitzonen und Kalender]]. ​
-  * [[kennen:​include:​compare]]: ​einfacherer ​Drei-Wege-Vergleich mit dem "​spaceship operator"​ ''​%%a <=> b%%''​. ''​[[..:​kennen:​stl#​vergleichsoperatoren|std::​rel_ops]]''​ wird geächtet. +  * [[kennen:​include:​compare]]:​ Drei-Wege-Vergleich mit dem "​spaceship operator"​ ''​%%a <=> b%%''​. ''​[[..:​kennen:​stl#​vergleichsoperatoren|std::​rel_ops]]''​ wird [[kennen:​begriffe#​geächtet]]
-  * ''<​barrier>'',​ ''<​latch>'',​ ''<​semaphore>'',​ ''<​stoptoken>''​ und RAII-konforme ''​std::​jthread''​ ergänzen die Möglichkeiten zur nebenläufigen Verarbeitung.  +  * ''<​barrier>'',​ ''<​latch>'',​ ''<​semaphore>'',​ ''<​stoptoken>''​ und [[kennen:​begriffe#​RAII]]-konforme ''​std::​jthread''​ ergänzen die Möglichkeiten zur nebenläufigen Verarbeitung.  
-  * [[kennen:​include:​bit]]:​ Bits zählen, rotieren, ''​bit_cast<​T>​()''​ +  * [[kennen:​include:​bit]]:​ Bits zählen, rotieren, ''​bit_cast<​T>​()''​[[kennen:​include:​numbers]] : mathematische Konstanten $\pi$, $e$, $\sqrt{2}$ u.a. 
-  * [[kennen:​include:​numbers]] : mathematische Konstanten $\pi$, $e$, $\sqrt{2}$ u.a. +
   * [[kennen:​include:​span]] zeigt auf einen Bereich von aufeinanderfolgenden Elementen, ohne ihn zu besitzen (Zeiger und Anzahl der Elemente).   * [[kennen:​include:​span]] zeigt auf einen Bereich von aufeinanderfolgenden Elementen, ohne ihn zu besitzen (Zeiger und Anzahl der Elemente).
   * [[kennen:​include:​syncstream]] garantiert in nebenläufigen Prozessen Ausgaben ohne Wettrennen.  ​   * [[kennen:​include:​syncstream]] garantiert in nebenläufigen Prozessen Ausgaben ohne Wettrennen.  ​
   * [[kennen:​include:​version]] ersetzt ''<​ciso646>''​ zur Versionserkennung,​ [[kennen:​include:​source_location]] löst ''​%%__FILE__%%'',​ ''​%%__LINE__%%''​ etc. ab.   * [[kennen:​include:​version]] ersetzt ''<​ciso646>''​ zur Versionserkennung,​ [[kennen:​include:​source_location]] löst ''​%%__FILE__%%'',​ ''​%%__LINE__%%''​ etc. ab.
-  * Typen ''​char8_t'',​ ''​u8string'',​ ''​u8string_view''​ für [[wpde>​UTF-8]]-kodierten [[http://​reedbeta.com/​blog/​programmers-intro-to-unicode/​|Unicode]]-Text,​ Methoden ''​s.starts_with(...)''​ und ''​sv.ends_with(...)''​ für ''​string''​ und ''​string_view''​ +  * Typen ''​char8_t'',​ ''​u8string'',​ ''​u8string_view''​ für [[wpde>​UTF-8]]-kodierten [[http://​reedbeta.com/​blog/​programmers-intro-to-unicode/​|Unicode]]-Text,​ Methoden ''​s.starts_with(...)''​ und ''​s.ends_with(...)''​ für ''​string''​ und ''​string_view''​ 
-  * Initialisierungsteil in ''​%%for (int i=0; auto e:​seq) ​std::cout << i++ << " : " << e << '​\n';​%%''​+  * Initialisierungsteil in ''​%%for (int i=0; auto e:​seq) ​...%%'' ​(enumerate?​)
   * bezeichnete Struktur-Initialisierer ''​struct A { int x,y,z; }; A a{.x=1, .z=3};''​ aus C übernommen   * bezeichnete Struktur-Initialisierer ''​struct A { int x,y,z; }; A a{.x=1, .z=3};''​ aus C übernommen
-  * ''​std::​erase(container,​ value)'' ​ist einfacher als ''​c.erase(std::​remove(c.begin(),​ c.end(), value), c.end())''​  +  ​* Funktionen 
-  * ''​std::​erase_if(container,​ predicate)''​ statt ''​c.erase(std::​remove_if(c.begin(),​ c.end(), ​pred), c.end())''​ +    ​* ''​std::​erase(container,​ value)'' ​anstelle von ''​c.erase(std::​remove(c.begin(),​ c.end(), value), c.end())'' ​und 
-  * ''​std::​midpoint(a,​ b)''​ und Interpolieren mit ''​std::​lerp(a,​ b, t)''​ als ''​a + t*(b-a)''​ in [[kennen:​include:​numeric]] +    * ''​std::​erase_if(container,​ predicate)''​ statt ''​c.erase(std::​remove_if(c.begin(),​ c.end(), ​predicate), c.end())'' ​für Container, 
-  * ''​std::​shift_left(first,​last,​n)''​ und ''​std::​shift_right(first,​last,​n)''​ in [[kennen:​include:​algorithm]]+    * ''​std::​midpoint(a,​ b)''​ und Interpolieren mit ''​std::​lerp(a,​ b, t)''​ als ''​a + t*(b-a)''​ in [[kennen:​include:​numeric]] 
 +    * ''​std::​shift_left(first,​last,​n)''​ und ''​std::​shift_right(first,​last,​n)''​ in [[kennen:​include:​algorithm]]
  
 ===== Technische Spezifikationen ===== ===== Technische Spezifikationen =====
Zeile 136: Zeile 133:
 und Entwürfe (PDTS/DTS = [Proposed] Draft Technical Specification) auf, darunter: und Entwürfe (PDTS/DTS = [Proposed] Draft Technical Specification) auf, darunter:
    
-  * Networking (TS [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2017/n4711.pdf|N4711]]) : Netzwerk-Sockets und IP-Protokolle. Einige (von mir nicht geprüfte) Beispiele finden sich [[https://​github.com/​jmossberg/​cpp-networking-ts|hier]]. +  * Networking (TS [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2018/n4771.pdf|N4771]]) : Netzwerk-Sockets und IP-Protokolle. Einige (von mir nicht geprüfte) Beispiele finden sich [[https://​github.com/​jmossberg/​cpp-networking-ts|hier]]. 
-  * Parallelism v2 (TS [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2018/​n4742.html|N4742]]) : Algorithmen und Typen für Parallelverarbeitung. +  * Parallelism v2 (TS [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2018/​n4793.pdf|N4793]]) : Algorithmen und Typen für Parallelverarbeitung. 
-  * Reflection (PDTS [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2018/n4746.pdf|N4746]]) : ''​reflexpr''​ greifen auf Namen und Eigenschaften von Typen und Variablen zu.+  * Reflection (TS [[http://​www.open-std.org/​jtc1/​sc22/​wg21/​docs/​papers/​2020/n4856.pdf|N4856]]) : ''​reflexpr''​ greifen auf Namen und Eigenschaften von Typen und Variablen zu.
  
  
modern_cpp.1593343711.txt.gz · Zuletzt geändert: 2020-06-28 13:28 von rrichter