contract_assert Anweisung (seit C++26)
Von cppreference.com
Eine contract_assert Anweisung ist eine Vertragsassertion, die im Körper einer Funktion oder Lambda-Ausdrucks erscheinen kann, um eine interne Bedingung zu überprüfen. Sie stellt sicher, dass die Bedingung während der Ausführung erfüllt ist. Bei Nichteinhaltung wird in Debug-Builds eine Verletzung ausgelöst (z. B. Abbruch), wenn die Bedingung zu false ausgewertet wird oder die Auswertung über eine Ausnahme verlassen wird. In Release-Builds kann sie zur Leistungssteigerung ignoriert werden.
Inhalt |
[bearbeiten] Syntax
contract_assert attr (optional) ( prädikat ) ; |
|||||||||
| attr | - | beliebige Anzahl von Attributen |
| predicate | - | boolscher Ausdruck, der zu true ausgewertet werden sollte |
[bearbeiten] Schlüsselwörter
[bearbeiten] Hinweise
| Feature-Testmakro | Wert | Std | Feature |
|---|---|---|---|
__cpp_contracts |
202502L |
(C++26) | Verträge |
[bearbeiten] Beispiel
Die contract_assert stellt sicher, dass die Norm eines Vektors positiv und entweder normal oder subnormal ist.
template <std::floating_point T> constexpr auto normalize(std::array<T, 3> vector) noexcept pre(/* is_normalizable(vector) */) post(/* vector: is_normalized(vector) */) { auto& [x, y, z]{vector}; const auto norm{std::hypot(x, y, z)}; // debug check for normalization safety contract_assert(std::isfinite(norm) && norm > T(0)); x /= norm, y /= norm, z /= norm; return vector; }
[bearbeiten] Referenzen
- C++26 Standard (ISO/IEC 14882:2026)
- 8.(7+c ) Assertion-Anweisung [stmt.contract.assert]
[bearbeiten] Siehe auch
| bricht das Programm ab, wenn die vom Benutzer angegebene Bedingung nicht true ist. Kann für Release-Builds deaktiviert werden. (Funktionsmakro) | |
| Vertragsassertionen (C++26) | spezifiziert Eigenschaften, die zu bestimmten Zeitpunkten während der Ausführung gelten müssen |
static_assert Deklaration (C++11) |
führt Assertionsprüfungen zur Kompilierzeit durch |
| Funktionsvertragspezifizierer (C++26) | spezifiziert Vorbedingungen (pre) und Nachbedingungen (post) |
[[assume(ausdruck)]](C++23) |
spezifiziert, dass der ausdruck an einer gegebenen Stelle immer zu true ausgewertet wird (Attribut-Spezifizierer) |