contract_assert
statement
(since C++26)
From cppreference.net
contract_assert 文は、関数またはラムダ本体に現れる契約表明であり、内部条件を検証するために使用されます。これは実行中に条件が成立することを保証し、条件が false と評価されるか、評価が例外によって終了した場合にデバッグビルドでは違反(例:終了)を引き起こし、パフォーマンス向上のためリリースビルドでは無視される可能性があります。
目次 |
構文
contract_assert
attr
(オプション)
(
predicate
)
;
|
|||||||||
| attr | - | 任意の数の 属性 |
| predicate | - | true と評価されるべきブーリアン式 |
キーワード
注記
| 機能テストマクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_contracts
|
202502L
|
(C++26) | Contracts |
例
contract_assert は、ベクトルのノルムが正であり、かつ normal または subnormal のいずれかであることを保証します。
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)}; // 正規化の安全性のためのデバッグチェック contract_assert(std::isfinite(norm) && norm > T(0)); x /= norm, y /= norm, z /= norm; return vector; }
サポート状況
|
C++26 機能
|
提案文書
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
|---|---|---|---|---|---|---|---|---|---|---|
| コントラクト ( FTM ) * | P2900R14 |
参考文献
- C++26標準 (ISO/IEC 14882:2026):
-
- 8.(7+ c ) アサーション文 [stmt.contract.assert]
関連項目
|
ユーザー指定の条件が
true
でない場合、プログラムを異常終了させる。
リリースビルドでは無効化される場合がある。
(関数マクロ) |
|
| 契約表明 (C++26) | 実行中の特定の時点で成立していなければならないプロパティを指定する |
static_assert
宣言
(C++11)
|
コンパイル時の表明チェックを実行する |
| 関数契約指定子 (C++26) | 事前条件 ( pre ) と事後条件 ( post ) を指定する |
[[
assume
(
式
)]]
(C++23)
|
指定された時点で
式
が常に
true
と評価されることを指定する
(属性指定子) |