29

Java では、メソッドへの入力引数が無効な場合、IllegalArgumentException(タイプはRuntimeException) をスローできます。C++ には、チェック済み例外とチェックなし例外の概念はありません。ランタイム例外を示すために使用できる標準 C++ に同様の例外はありますか? それとも、標準にはない共通のスタイルがありますが、このような状況では誰もが実際に従っていますか?

または、独自のカスタム例外を作成してスローする必要がありますか?

4

5 に答える 5

2

std::domain_error はあなたが探しているものかもしれませんが、それを使用している人はほとんどいないと思います。ほとんどの人は、std::exception から独自の例外タイプを派生させます。

于 2009-03-25T14:17:44.007 に答える
1

標準の例外をスローするか、独自の例外をロールすることができます。スローする例外に追加情報を含めることをお勧めします。それは、自分で行うのに十分な理由です。

個人的には、私が取り組んだシステムでそのようなドメインチェックを見たことがありません。それは確かに普遍的ではありません。

于 2009-03-25T14:51:00.807 に答える
1

無効とは、スローできるメソッドの期待値を満たさないことを意味します

std::logic_error 
or 
std::runtime_error.

あるオブジェクトを別のオブジェクトに変換できないなどのキャストに関連する何かを意味する場合、例外はなく、自動的にスローされません。

実際、そうなるでしょう。ただし、参照の dynamic_cast<> のみ。投げます

std::bad_cast

これを自分で投げるのが良い考えかどうかはわかりません。

論理エラーであるため、誰かが間違ったパラメーターを渡した場合に備えて、logic_error とその派生物を使用することを好みます: プログラマーが間違った型の引数を渡しました。

しかし、何よりも私はそのような場合に assert を使用するのが好きです。関数に間違った値や型を渡すようなことは、開発中にのみ許容できるため、リリースではそのようなチェックを避ける必要があります。

于 2009-03-25T14:19:16.390 に答える