私はB. Stroustrup によるC++17 についての考え でコントラクトについて読み、それらについて話す小さなプレゼンテーションを支援しましたが、それらを本当に理解しているかどうかはわかりません。
だから私はいくつかの尋問があり、いくつかの例でそれらを説明することが可能であれば:
コントラクトはクラシックのより良い代替品であり、
assert()
一緒に使用する必要がありますか? ソフトウェア開発者にとって、実際に簡単な言葉で表される契約は何ですか?契約は、例外の処理方法に影響を与えますか? はいの場合、例外と契約をどのように使用する必要がありますか?
コントラクトを使用すると、実行時のオーバーヘッドが発生しますか? リリースコードでそれらを無効にすることはできますか?
提案 N4415から:
Vector クラスのインデックス演算子の事前条件コントラクトは、次のように記述できます。
T& operator[](size_t i) [[expects: i < size()]];
同様に、ArrayView クラスのコンストラクターの事後条件コントラクトは、次のように表現できます。
ArrayView(const vector<T>& v) [[ensures: data() == v.data()]];
@Keith Thompson のコメントに感謝します。
コントラクトは C++20 にはなりませんでした。新しい研究会SG21が発足しました。