contract_assert
statement
(since C++26)
Une contract_assert est une assertion contractuelle qui peut apparaître dans le corps d'une fonction ou d'une lambda pour vérifier une condition interne. Elle garantit que la condition est respectée pendant l'exécution, déclenchant une violation (par exemple, une terminaison) dans les versions de débogage si la condition s'évalue à false ou si l'évaluation se termine via une exception, et peut être ignorée dans les versions de production pour des raisons de performance.
Table des matières |
Syntaxe
contract_assert
attr
(optionnel)
(
prédicat
)
;
|
|||||||||
| attr | - | n'importe quel nombre d' attributs |
| predicate | - | expression booléenne qui devrait s'évaluer à true |
Mots-clés
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_contracts
|
202502L
|
(C++26) | Contrats |
Exemple
La contract_assert garantit que la norme du vecteur est positive et soit normale ou subnormale .
template <std::floating_point T> constexpr auto normalize(std::array<T, 3> vector) noexcept pre(/* est_normalisable(vector) */) post(/* vector: est_normalisé(vector) */) { auto& [x, y, z]{vector}; const auto norm{std::hypot(x, y, z)}; // vérification de débogage pour la sécurité de normalisation contract_assert(std::isfinite(norm) && norm > T(0)); x /= norm, y /= norm, z /= norm; return vector; }
État de la prise en charge
|
Fonctionnalité C++26
|
Document(s)
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
|---|---|---|---|---|---|---|---|---|---|---|
| Contracts ( FTM ) * | P2900R14 |
Références
- Norme C++26 (ISO/CEI 14882:2026) :
-
- 8.(7+ c ) Instruction d'assertion [stmt.contract.assert]
Voir aussi
|
interrompt le programme si la condition spécifiée par l'utilisateur n'est pas
true
. Peut être désactivé pour les versions de production.
(macro fonction) |
|
| Assertions de contrat (C++26) | spécifie les propriétés qui doivent être vérifiées à certains points pendant l'exécution |
static_assert
déclaration
(C++11)
|
effectue une vérification d'assertion à la compilation |
| spécificateurs de contrat de fonction (C++26) | spécifie les préconditions ( pre ) et postconditions ( post ) |
[[
assume
(
expression
)]]
(C++23)
|
spécifie que l'
expression
sera toujours évaluée à
true
à un point donné
(spécificateur d'attribut) |