命名空间
变体
操作

contract_assert 语句 (C++26 起)

来自 cppreference.cn
< cpp‎ | 语言
 
 
C++ 语言
 
 

contract_assert 语句是一个契约断言,可以出现在函数或 lambda 主体中以验证内部条件。它确保在执行期间条件成立,如果在调试构建中条件评估为 false 或评估通过异常退出,则会触发违规(例如终止),在发布构建中可以出于性能考虑而忽略它。

目录

[编辑] 语法

contract_assert attr (可选) ( predicate ) ;
属性 - 任意数量的属性
谓词 - 应评估为 true 的布尔表达式

[编辑] 关键词

contract_assert

[编辑] 注意

功能测试宏 标准 特性
__cpp_contracts 202502L (C++26) 契约

[编辑] 示例

contract_assert 确保向量的范数是正的,并且是正常或次正常的。

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;
}

[编辑] 参考资料

  • C++26 标准 (ISO/IEC 14882:2026)
  • 8.(7+c ) 断言语句 [stmt.contract.assert]

[编辑] 另请参阅

如果用户指定条件不为 true,则中止程序。在发布版本中可能会禁用。
(函数宏) [编辑]
契约断言 (C++26) 指定在执行期间某些点必须满足的属性[编辑]
static_assert 声明 (C++11) 执行编译时断言检查[编辑]
函数契约说明符 (C++26) 指定前置条件 (pre) 和后置条件 (post)[编辑]
[[assume(expression)]]
(C++23)
指定 expression 在给定点将始终评估为 true
(属性说明符)[编辑]