C++17 – Was gibt’s Neues? Ein Überblick über die wichtigsten Erweiterungen

Seite: 3/3

Firma zum Thema

Parallele Algorithmen der Standard Template Library

Bild 4: In C++17 hält die Standard Template Library 69 neue Varianten (schwarz) und acht neue parallele Algorithmen (in rot dargestellt) parat.
Bild 4: In C++17 hält die Standard Template Library 69 neue Varianten (schwarz) und acht neue parallele Algorithmen (in rot dargestellt) parat.
(Bild: Rainer Grimm)

69 Algorithmen der Standard Template Library werden in sequentieller, paralleler und parallel und vektorisierender Variante zu Verfügung stehen. Zusätzlich erhalten wir 8 neue Algorithmen. Die 69 neuen Varianten (schwarz) und die 8 neuen Algorithmen (rot) sind in Bild 4 kurz und kompakt dargestellt:

Bildergalerie
Bildergalerie mit 5 Bildern

Welche Version eines Algorithmus ausgewählt wird, steuert der Anwender über das sogenannten Policy Tag. Wie funktioniert das Ganze?

vector v = ...

// standard sequential sort
std::sort(v.begin(), v.end());        // (1)

// sequential execution
std::sort(std::parallel::seq, v.begin(), v.end());    // (2)

// permitting parallel execution
std::sort(std::parallel::par, v.begin(), v.end());    // (3)

// permitting parallel and vectorised execution
std::sort(std::parallel::par_unseq, v.begin(), v.end()); // (4)

Schön ist an dem obigen Beispiel zu sehen, dass die klassische Variante von std::sort (1) mit C++17 immer noch zur Verfügung steht. Dagegen lässt sich jetzt mit C++17 explizit die sequentielle (2), die parallele (3) oder auch die parallele und vektorisierende Variante (4) von std::sort anfordern.

Dateisystem Bibliothek

Die neue Dateisystem Bibliothek basiert auf boost::filesystem. Ihre Komponenten sind optional. Das bedeutet, dass nicht die ganze Funktionalität von std::filesytem auf jeder Plattform verfügbar sein muss. Zum Beispiel unterstützt FAT-32 keine symbolischen Links.

Die Bibliothek enthält die drei Konzepte Datei, Dateinamen und Pfad. Datei können Verzeichnisse, harte Links, symbolische Links oder reguläre Dateien sein. Pfade können absolut oder relativ sein.

Es gibt ein mächtiges Interface für das Lesen und Manipulieren des Dateisystems. Bild 5 zeigt einen ersten Eindruck.

Bild 5: Erster Eindruck des Interfaces für Lesen und Manipulieren der neuen Dateisystem Bibliothek in C++17.
Bild 5: Erster Eindruck des Interfaces für Lesen und Manipulieren der neuen Dateisystem Bibliothek in C++17.
(Bild: Rainer Grimm)

fs::current_path (1) gibt den aktuellen Pfad zurück. Mit std::filesystem lässt sich

ein Verzeichnishierarchie erzeugen (2). Der ungewöhnlich wirkende Operator /= (3) ist für Pfade überladen. Der Ausdruck fs::create_symlink (4) erzeugt direkt einen symbolischen Link. Die Eigenschaften einer Datei lassen sich auch abfragen (5). Der Aufruf

recursive_directory_iterator (7) ist sehr mächtig. Damit können Verzeichnisse rekursiv traversiert werden. Klar, auf dem Online-Compiler kann kein Verzeichnis gelöscht werden (8).

std::any, std::optional und std::variant

Was haben die neuen Datentypen std:any, std::optional und std::variant gemein? Sie haben alle ihren Ursprung in boost.

std::any ist die richtige Wahl für einen typ-sicheren Container, der einen beliebigen Wert besitzen kann. Beliebiger Wert stimmt nicht ganz genau. std::any fordert, dass seine Werte kopierbar sein müssen.

std::optional steht für einen Datentyp, der einen Wert oder keinen Wert enthalten kann. Er ist durch Haskells Maybe Monade inspiriert.

std::variant ist eine typ-sichere union. Sie kann keine Referenzen oder Arrays annehmen.

Fazit: C++17 – GROSS oder klein?

Ist C++17 nun ein großer C++ Standard in der Tradition von C++98 oder C++11, oder ein kleiner C++ Standard in der Tradition von C++14. Um diese Frage zu beantworten, fehlen noch wichtige Details. Auf diese Frage geht der Autor in seinenBlogbeiträgen zu C++17 näher ein.

Der Autor

Der Autor, Rainer Grimm.
Der Autor, Rainer Grimm.
(Bild: Rainer Grimm)

* Rainer Grimm ist seit vielen Jahren als Softwarearchitekt, Team- und Schulungsleiter tätig. In seiner Freizeit schreibt er gerne Artikel zu den Programmiersprachen C++, Python und Haskell, spricht aber auch gerne auf Fachkonferenzen. Auf seinem Blog Modernes C++ beschäftigt er sich intensiv mit seiner Leidenschaft C++. Seit 2016 steht er auf selbstständigen Beinen. Insbesondere das Vermitteln von Wissen zu modernem C++ ist ihm eine Herzensangelegenheit.

Seine Bücher "C++11 für Programmierer", "C++" und "C++-Standardbibliothek" für die kurz und gut Reihe sind beim Verlag O'Reilly erschienen. Seine englischsprachigen Werke "The C++ Standard Library" und "Concurrency with Modern C++" hat er direkt bei Leanpub veröffentlicht.

Dieser Beitrag stammt ursprünglich von unserem Schwesterportal Embedded-Software-Engineering.de.

(ID:45095872)