名稱空間
變體
操作

contract_assert 語句 (C++26 起)

來自 cppreference.com
< 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
(屬性說明符)[編輯]