-
Mehr Codekontrolle mit C++26 Contracts
- Multiplikationsfunktion als Beispiel
- Invarianten einer Funktion prüfen und Auswertungssemantiken
- Fazit
Die gute Nachricht gleich vorweg: Contracts sind Bestandteil von C++26. Das Standardisierungskomitee hat beim finalen Treffen keine nennenswerten Änderungen mehr vorgenommen. Vorschläge für eine andere Syntax oder ein verringertes Featureset sind vorerst vom Tisch. C++ ist jetzt eine von vielen Sprachen, die Contracts als Sprachmittel anbieten. Eiffel und Ada besitzen das Feature schon lange. Aus Eiffel stammt auch der Begriff Design by Contracts (DbC), der rechtlich geschützt ist.
Die Idee hinter Contracts ist, Nutzenden einer Funktion die möglichen Anforderungen an die Funktionsparameter direkt und in Code mitzuteilen. Damit weiß ein Aufrufer, welche Werte für einen Parameter erlaubt sind. In C++ steht dafür pre zur Verfügung. Auch das Ergebnis einer Funktion lässt sich mit einem Contract auszeichnen. Er gibt eine Garantie für das Resultat und ist durch post angegeben.
- Das Standardisierungskomitee hat Contracts in der bislang diskutierten Form in C++26 aufgenommen.
- Contracts sind ein Sprachfeature, das Schnittstellenbedingungen für Funktionen definiert.
- Die vier Auswertungssemantiken enforce, ignore, observe und quick-enforce definieren Verhaltensweisen für den Fall, dass eine Bedingung nicht erfüllt ist.
Beides ist nicht neu, jede Funktion hat Anforderungen an ihre Daten. Bisher ließen diese sich in C++ jedoch nur durch Dokumentation mitteilen. Der Nachteil dieses Ansatzes ist, dass Dokumentation und Code auseinanderfallen können und dass Entwickler die Dokumentation finden und lesen müssen. In C++26 werden Contracts direkt in C++-Code dokumentiert, also der Sprache, in der auch entwickelt wird, und ein Programm prüft diese Anforderungen zur Laufzeit.
Das war die Leseprobe unseres heise-Plus-Artikels "Mehr Codekontrolle mit C++26 Contracts". Mit einem heise-Plus-Abo können Sie den ganzen Artikel lesen.










English (US) ·