Namespaces
Variants

contract_assert statement (since C++26)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

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

contract_assert

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)