iX 12/2016
S. 106
Wissen
Softwareentwicklung
Aufmacherbild

C++-Optimierungen durch Compile-Zeit-Tricks

Flinke Funktionen

C++11 bietet etliche Möglichkeiten, bereits beim Übersetzen Fehler zu vermeiden. Neben diesen vor allem der Sicherheit zuträglichen Fähigkeiten gibt es weitere Compiler-Features, die das Tempo des erzeugten Codes deutlich steigern können.

Modernes C++ hat viel zu bieten für die objektorientierte Programmierung. Während sich der Artikel „Fit fürs Kleine“ in iX 10/2016 [1] auf die für sicherheitskritische Anwendungen wichtigen Features konzentrierte, wird es hier vor allem um die Leistung gehen. Allerdings lassen sich nicht alle Fähigkeiten der Sprache einfach „Sicherheit“ oder „Tempo“ zuordnen. So erlaubt das Schlüsselwort static_assert, Bedingungen beim Übersetzen zu prüfen, was durchaus sicherheitsrelevant ist. Verknüpft mit der neuen Type-Traits-Bibliothek entfalten solche Bedingungen besondere Kraft. Andererseits kommt diese Bibliothek häufig zum Einsatz, um die schnelle Variante eines Algorithmus schon zur Compile-Zeit auszuwählen.

static_assert ist das Mittel der Wahl, modernen C++-Code sicherer zu gestalten. Es darf überall im Programm stehen, und sein Einsatz ist denkbar einfach: Es verlangt einen Ausdruck und einen String. Der Ausdruck muss sich zur Übersetzungszeit zu true oder false evaluieren lassen. Ist er false, gibt der Compiler den String als Fehlermeldung aus und erzeugt keine ausführbare Datei. Da der Compiler den static_assert-Ausdruck auswertet, entstehen zur Laufzeit keine Kosten. Solche beim Übersetzen auswertbaren Ausdrücke heißen „konstante Ausdrücke“. Dazu später mehr.