Modernisierte Programmiersprache

C++17 – Was bringt der neue Standard?

Der Programmierstandard C++17 wartet mit neuen, standardkonformen Funktionen auf. Wir zeigen Ihnen, was sich geändert hat.

12.12.2017Text: tnt-graphics0 Kommentare
Softwareentwicklung Mann

Mit C++17 hat das Standard-Komitee die Programmiersprache weiter modernisiert. Seit der Einführung des «grossen» Standards C++11 konnte die C++ Community viel Skepsis gegenüber den neuen Sprachkonstrukten und Features überwinden. Das Credo, dass alter Code kompilieren und laufen muss, wird weiterhin unterstützt. Dennoch hat das Standard-Komitee in C++17 einige Features und Konzepte offiziell als «deprecated» markiert oder entfernt. Deren Funktionalität wurde durch neue, standard-konforme Funktionen ersetzt.

C++ Timeline

Wie die vorherigen Standards, so ist auch C++17 stark davon geprägt, die Programmiersprache als modern und benutzerfreundlich zu positionieren. Seit jeher ist C++ dafür bekannt, dass sie verhältnismässig viel Schreibarbeit erfordert. Dies trifft insbesondere auf die Standard Library beziehungsweise auf die Templates zu. Bei neuen Features wie structured bindingsfold expressions und delegating constructors legte das Standard-Komitee grossen Wert darauf, die Schreibarbeit für den Entwickler zu minimieren. Der Grundsatz von «less code = less bugs» erhält somit durch die Sprache selbst Rückhalt. Das Verankern häufig benutzter Programmiermuster als Sprachfeatures vereinfacht die Code-Optimierung durch den Compiler. Dies ist auf den ersten Blick weniger offensichtlich, aber genauso wichtig wie die Syntaxerweiterungen.

Zudem vereinheitlicht der neue Standard Code-Interpretationen zwischen Compilern und Plattformen. Als Beispiel ist der von vielen Compilern bereits optional umgesetzte copy elision nun ein zwingendes Feature genauso wie die striktere order of evaluation, für Teile von verketteten Ausdrücken. Zudem sind die exception specifications neu ebenfalls im Typensystem vertreten. Beide helfen dem Programmierer Code zu schreiben, der unabhängig von Compiler oder Plattform ist. Verschiedene Compiler unterstützen seit längerem die standard attributes sowie die __has_include Direktive. Diese zwei Features sind nun unter einer gemeinsamen Syntax verfügbar.

Die Erweiterungen der Standard Library sind in C++17 klar umfangreicher ausgefallen als jene der Spracherweiterungen. Das ist positiv zu werten, da die Standard Library für den Programmier-Alltag vermutlich deutlich relevanter ist. Insbesondere erwähnt sei hier die Einbindung von filesystem-functions. Mit diesen Funktionen vereinfacht sich das Schreiben von Cross-Plattform Code erheblich. Weiter hinzugekommen sind Algorithmen zum Handling von Datencontainern und parallelen Ausführungen – was wiederum der Portabilität von Code zugutekommt. Mit variants und dem Datentyp std::any kommen Features in die Standard Library, die wir aus anderen high-level Programmiersprachen kennen.

Neben den genannten Erweiterungen kommen diverse kleinere Features und Aufwertungen von bestehenden Funktionen hinzu. Hier findet sich eine komplette Liste der Erneuerungen.

Zusammenfassend halten wir fest, dass C++17 ähnlich viele Neuerungen wie bereits C++14 umfasst. Damit brachte der C++11 Standard nach wie vor die grössten Änderungen in der Sprache. Das neueste Inkrement bringt jedoch weitere spürbare Verbesserungen.

Unser Wissen im Abo

Technica Radar 2024

Mehr als KI: Das sind die wichtigsten IT-Trends 2024

AI/KI
6 Tipps, wie Sie Ihr Team effizienter machen

Müde Augen ade: So helfen kurze Codezeilen

Agile
Digitalisierung im Gesundheitswesen

«Die Digitalisierung scheitert, wenn sie dem Menschen die Autonomie nimmt»

Digitalisierung

Artikel kommentieren

Beachtung!

Entschuldigung, bisher haben wir nur Inhalte in English für diesen Abschnitt.

Achtung!

Entschuldigung, bisher haben wir für diesen Abschnitt nur deutschsprachige Inhalte.

Beachtung!

Entschuldigung, bisher haben wir nur Inhalte in English für diesen Abschnitt.

Achtung!

Entschuldigung, bisher haben wir für diesen Abschnitt nur deutschsprachige Inhalte.