C++17 – Was bringt der neue Standard?

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.

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 bindings, fold 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.


Sind Sie an weiteren Informationen zu C++ interessiert?
Im bbv Booklet «Die neuen C++ Standards – C++11 bis C++17» erklären unsere Experten auf über 60 Seiten die wichtigsten Funktionen und Spracherweiterungen von C++ 11/14/17 anhand von Beschreibungen und Code-Beispielen.


About Dominik Berner

Dominik Berner is a well seasoned C++ coder and agilist with a dedication to construct good, maintainable software.
This entry was posted in Booklet, C++, Cross-Plattform, Windows. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *