contract_assert
語句 (C++26 起)
來自 cppreference.com
contract_assert 語句是一個契約斷言,可以出現在函式或 lambda 主體中以驗證內部條件。它確保在執行期間條件成立,如果在除錯構建中條件評估為 false 或評估透過異常退出,則會觸發違規(例如終止),在釋出構建中可以出於效能考慮而忽略它。
目錄 |
[編輯] 語法
contract_assert attr (可選) ( predicate ) ; |
|||||||||
屬性 | - | 任意數量的屬性 |
謂詞 | - | 應評估為 true 的布林表示式 |
[編輯] 關鍵詞
[編輯] 注意
功能測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__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 (屬性說明符) |