2

私たちは 4 番目の最後の C++ クラスにいます。例外仕様に関する Herb Sutter の投稿と、C++ の次のリリースで例外仕様が非推奨になることを示す stackoverflow に関するいくつかの投稿を見てきました。

例外仕様を実装する方法の例を見つけることができますが、例外仕様が必要なだけであり、それらが例外処理とどのように異なるかを理解するのにいくつかの問題があります。

いくつかの洞察を提供するための支援は、最も役に立ちます。

4

3 に答える 3

0

例外仕様は、その名前が示すように、関数がスローする可能性のある例外を指定することに関するものです。一般に。ただし、 mayがどのように適用されるかは言語によって異なります。

  • Java では、コンパイラはこれを静的に強制し、関数が何か他のものをスローする可能性がある場合はプログラムを拒否します (他の何かが特定の基本例外クラスから派生しない限り)。
  • C ++では、コンパイラはプログラムを許可しますが、ランタイムチェックを挿入し、指定されていないものがスローされた場合は呼び出しますstd::unexpected

一般に、例外仕様は、次の理由でほぼ普遍的に非難されています。

  • 彼らはうまく構成できません。例外のセット X と Y をそれぞれスローする 2 つの関数を呼び出す場合、結果の関数は少なくともX と Y の和集合を宣言する必要があります。コンテキストを維持するためにオリジナルの上に。3 つまたは 5 つの深い例外チェーンになることは珍しくありません。
  • 一部の基本的な操作がスローされる場合があります。C++ では、メモリ割り当てがスローされる場合がありstd::bad_allocます。したがって、たとえば、ほぼすべての STL コレクションが影響を受けやすくなります。

可能であれば、例外仕様について学んだことは忘れてください。

于 2013-07-16T17:48:16.557 に答える