3

私がこのようなfncを持っている場合:

void fnc(const SomeType&){/**/}  

そして、このfncの前提条件と事後条件をリストすると、フォームの前提条件をリストすると思います
。SomeTypeは正しいタイプである必要がありますが、かなり馬鹿げていますね。私の大学ではこのようなものをリストしてほしいのですが、引数のタイプが正しくない場合、コードはとにかくコンパイルされないので、このフォームの前提条件を設定するのは間違っていると思います。しかし、いつものように、私は間違っています。

4

4 に答える 4

1

明白なことを述べないでください。

あなたが言うように、タイプが一致しない場合、コードは明らかにコンパイルされません。

事前条件と事後条件は、関数が実行しようとしていることによって異なります。

于 2010-11-22T11:58:26.403 に答える
0

そのようなコメントをするのはばかげています-私は同意します。コメントはいくつかの有用な情報を提供するはずです。

前提条件のリストは、関数を実行するために満たす必要があるものを示している必要があります。事後条件のリストは、関数の終了時に何が満たされなければならないかを示している必要があります。これらの状態は、次の3つの方法で確認できます。

  • 関数を実行するために条件が満たされる必要がある場合の実行時アサーション(cマクロassert()を使用)。それ以外の場合、プロセスは終了します。
  • 静的アサーション(c++0xを使用する場合はstd::static_assert、またはBOOST_STATIC_ASSERTを使用)。このチェックはコンパイル時に行われるため、通常は行われません。
  • エラーメカニズム(例外をスローするか、エラーコードを返す)

テンプレート引数のリストを関数コメントに追加し、それらが要件に一致しない場合にコンパイルを失敗させることもできます。

于 2010-11-22T11:53:06.327 に答える
0

先生がこの種のコメントを追加するように求めている場合、そのようなコメントが単純に馬鹿げていて、とにかくコンパイラによって検証されるという単純なケースではおそらくそうではありません。

ただし、場合によっては、アルゴリズムで定義された正式な型が、C++で使用される実装型よりも制限が厳しい場合があります。そのような場合、そのようなコメントはいくつかの用途があるかもしれません。

もう1つの便利なケースは、コメントに基づいて自動生成されたドキュメントの場合ですが、ドキュメントシステムは、関数プロトタイプからその情報を単独で抽出できる必要があります。

于 2010-11-22T12:05:49.927 に答える
0

私はそれを次のように述べます:

最初の引数は、タイプSomeType、またはそれにキャスト可能でなければなりません。

コンパイラがチェックできるかどうかは関係ありません。関数のシグニチャからいくつかの前提条件を考案できる場合、それはこれらが前提条件ではないことを意味するわけではありません。前提条件を読んだら、ユーザーは正しくコンパイルされて実行されるプログラムを作成できる必要があります。

于 2010-11-22T12:11:58.227 に答える