できる以上のことを何もつけ加えていない、と私に書き送ってくれました。行う技術を示してそれを説明しようとします。いうのは意味のあることでしょう。してDbCをサポートしていますが、ここではこれについては触れません。C++の標準ではなく、他のC++コンパイラでは全くサポートされていないからです。いう文書により詳しく説明されています。基本的な"契約"になります。assert契約が失敗したときには、例外が送出されます。そのままプログラムを終了させることもできます。コンストラクタの終了時とデストラクタの開始時に毎回チェックされます。そのオブジェクトのクラス不変条件を検査します。クラス不変条件は継承されます。派生クラスの不変条件は暗黙の内に基底クラスの不変条件を呼び出します。オーバーライドする全ての関数の事前条件とORされます。事後条件はANDされます。コンパイル後のコードから取り除いたりすることができます。コードは意味的に同等に振る舞います。引数を検査し、失敗すればプログラムを停止することができます。マクロでON/OFFを切り替えられます。失敗したときに例外を投げることもしません。メッセージを出力した後単にプログラムを終了させるだけです。マクロによるテキスト処理に依存しています。以上でも以下でもありません。複雑になる要因があります。呼び出されなくてはなりません。3;}あるいは、関数の終了場所が一カ所になるよう、返値を変数に記録して実現します。テクニックとして実現することもできるでしょう。うまく扱うことができます。囲う必要もありません。OFFになっていれば全てのコードを最適化して除去してくれるでしょう。いう状況を考えていましょう。避けることも可能です。返値が加わって事後条件でチェックする場合を考えましょう。引数が少々加わりました。両方が満たされなくてはならないです。}};少し面白い現象が発生しています。assertを使うことができません。読者への宿題としておきましょう。結論これらのC++のテクニックはかなりの程度までは動作します。assertを除いては標準化されていないため、プロジェクト毎に異なった方法が採られています。書く必要がありますし、コードは相当ごちゃごちゃとなります。これが、実際にDbCが使われているのをめったに見かけない原因でしょう。正しく動かすための簡単な手段を提供しています。どのプロジェクトでも使われるようになるでしょう。"契約プログラミング"の理論と根拠が導入されています。24.3.7.1~24.3.7.3節に、C++における契約プログラミングについての議論があります。