C++26-Härtung: Wie die Standardbibliothek undefiniertes Verhalten stoppt

C++26: Standard Library Hardening Experiments

C++26-Härtung: Wie die Standardbibliothek undefiniertes Verhalten stoppt

Der Artikel untersucht die neue C++26-Funktion "Standard Library Hardening", die ausgewählte Vorbedingungen der Standardbibliothek in einem gehärteten Modus prüft und Verstöße mit terminierender Semantik beendet. Anhand von Beispielen wie std::vector::operator[] zeigt er, wie out-of-bounds-Zugriffe von undefiniertem Verhalten zu erkennbaren Fehlern werden. Er behandelt die zugrunde liegenden Papiere P3471, P3697 und P3878, die gehärteten Bedingungen für Container, Iteratoren, Strings und mehr sowie die unterschiedlichen Aktivierungsmechanismen in libstdc++, libc++ und MSVC STL. Zudem wird die Laufzeitkostenfrage angesprochen und klargestellt, dass Härtung keine vollständige Speichersicherheit bietet.

C++26-Härtung macht C++ nicht plötzlich speichersicher, noch ersetzt sie Sanitizer, statische Analyse, gutes API-Design oder sorgfältige Validierung.
  1. steveklabnik

    Eine Sache, die mich bei all dem neugierig macht: Ich dachte, das alles wäre in C++26 gelandet, und trotzdem bekommen wir immer noch Papiere wie https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p43...

    > Der C++26-Entwurf hat noch keine endgültige Abstimmung durchlaufen

    Das ist von Bjarne mitverfasst, und ich bin sicher, es ist nicht trivial falsch, aber vielleicht übersehe ich nur ein Detail. Ich weiß, Bjarne hat damit gedroht, ein Veto gegen C++26 einzulegen, aber ich dachte, er hätte es nicht getan?

    Hat jemand, der den Prozess etwas besser verfolgt als ich, etwas Kontext dazu?

  2. Cieric

    Es gibt am Ende einen kleinen Hinweis darauf, aber ich hoffe wirklich, dass Compile-Zeit-Vertragsprüfungen häufiger werden. Ich weiß, einige Sprachen wie Spark, Dafny und ein paar andere machen das und erzeugen implizite Verträge für Dinge wie Division durch 0. Ich habe mit meiner eigenen benutzerdefinierten Sprache experimentiert, die diese Dinge tun, und jeden Tag bei der Arbeit zurück zu C++ zu gehen ist tatsächlich eine kleine Enttäuschung deswegen.

  3. pama

    30 Jahre zu spät, aber ich nehme es. Verträge wirken nützlich und weniger chaotisch als Ausnahmen.

Mehr von diesem Tag

2026-08-31