名前空間
変種
操作

contract_assert ステートメント (C++26 以降)

From cppreference.com
< cpp‎ | language
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

contract_assert ステートメントは、内部条件を検証するために関数またはラムダの本体に出現する契約アサーションです。これは、実行中に条件が保持されることを保証し、条件が false と評価されるか、評価が例外を介して終了した場合にデバッグビルドで違反 (例: 終了) をトリガーし、パフォーマンスのためにリリースビルドでは無視できます。

目次

[編集] 構文

contract_assert attr (オプション) ( predicate ) ;
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) Assertion statement [stmt.contract.assert]

[編集] 関連項目

ユーザー指定の条件が true でない場合にプログラムを異常終了させる。リリースビルドでは無効化されることがある。
(関数マクロ) [編集]
契約アサーション (C++26) 実行中の特定の時点で保持されなければならないプロパティを指定します[編集]
static_assert 宣言 (C++11) コンパイル時アサーションチェックを実行する[編集]
関数契約指定子 (C++26) 事前条件 (pre) と事後条件 (post) を指定します[編集]
[[assume(expression)]]
(C++23)
特定の時点でexpressionが常にtrueに評価されることを指定します
(属性指定子)[編集]
English 日本語 中文(简体) 中文(繁體)