contract_assert
statement
(since C++26)
Una declaración contract_assert es una aserción de contrato que puede aparecer en el cuerpo de una función o lambda para verificar una condición interna. Garantiza que la condición se mantenga durante la ejecución, activando una violación (por ejemplo, terminación) en compilaciones de depuración si la condición se evalúa como false o la evaluación sale mediante una excepción, y puede ignorarse en compilaciones de lanzamiento por rendimiento.
Contenidos |
Sintaxis
contract_assert
attr
(opcional)
(
predicate
)
;
|
|||||||||
| attr | - | cualquier número de attributes |
| predicate | - | expresión booleana que debe evaluarse como true |
Palabras clave
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_contracts
|
202502L
|
(C++26) | Contratos |
Ejemplo
El contract_assert garantiza que la norma del vector sea positiva y sea normal o subnormal .
template <std::floating_point T> constexpr auto normalize(std::array<T, 3> vector) noexcept pre(/* es_normalizable(vector) */) post(/* vector: está_normalizado(vector) */) { auto& [x, y, z]{vector}; const auto norm{std::hypot(x, y, z)}; // verificación de depuración para seguridad de normalización contract_assert(std::isfinite(norm) && norm > T(0)); x /= norm, y /= norm, z /= norm; return vector; }
Estado de compatibilidad
|
Característica de C++26
|
Documento(s)
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
|---|---|---|---|---|---|---|---|---|---|---|
| Contracts ( FTM ) * | P2900R14 |
Referencias
- Estándar C++26 (ISO/IEC 14882:2026):
-
- 8.(7+ c ) Sentencia de aserción [stmt.contract.assert]
Véase también
|
aborta el programa si la condición especificada por el usuario no es
true
. Puede desactivarse para builds de release.
(macro de función) |
|
| Aserciones de contrato (C++26) | especifica propiedades que deben cumplirse en ciertos puntos durante la ejecución |
static_assert
declaración
(C++11)
|
realiza verificación de aserciones en tiempo de compilación |
| especificadores de contrato de función (C++26) | especifica precondiciones ( pre ) y postcondiciones ( post ) |
[[
assume
(
expresión
)]]
(C++23)
|
especifica que la
expresión
siempre evaluará a
true
en un punto dado
(especificador de atributo) |