質問

メソッドへの入力引数が無効である場合は、

Javaでは、我々は(タイプIllegalArgumentExceptionである)RuntimeExceptionを投げることができます。 C ++では、チェックされ、チェックされない例外という概念はありません。実行時例外を示すために使用することができ、標準C ++で同様の例外はありますか?またはそこには、標準では一般的なスタイルではなく、誰もがこのような状況のため、実際には次の?

それとも、私はちょうど私の独自のカスタム例外を作成し、それをスローする必要がありますか?

役に立ちましたか?

解決

は、Javaと異なり、C ++は「標準フレームワーク」が、わずかな(とオプション)標準ライブラリを持っていません。また、例外がすべてでを使用するかどうかをC ++プログラマの下に異なる意見があります

そのため、あなたは異なる人々によって異なる勧告を見つける:いくつかは、いくつかのライブラリ(例えばポコ)が(STD由来::例外)カスタム例外階層を使用し、標準ライブラリからの例外タイプを使用するように、他のものは使用しないでくださいすべての例外(例えばQtの)ます。

あなたが標準ライブラリに固執したい場合は、

は、専門的な例外タイプが存在する:。invalid_argumentlogic_errorを拡張)

#include <stdexcept>

// ...
throw std::invalid_argument("...");

参考:ここstdexceptで定義された(及び文書化)標準例外型の概要である:

exception
    logic_error
        domain_error
        invalid_argument
        length_error
        out_of_range
    runtime_error
        range_error
        overflow_error
        underflow_error

他のヒント

のstd :: domain_errorは、あなたが探しているものかもしれませんが、私は非常に少数の人々はそれを使用する疑いがあります。ほとんどの人ははstd ::例外から、独自の例外型を派生ます。

私は常に不正な引数のためstd::invalid_argumentを使用します。

あなたは意味無効に満足していないメソッド期待値を行うことにより、あなたが投げることができる場合は、

std::logic_error 
or 
std::runtime_error.

あなたは一つのオブジェクトのようなキャストに関連する何かを意味場合は別のものに変換することはできません - そこにそのための例外はありませんし、それが自動的にスローされることはありません。

それは意志実際には

をしかし、唯一のためのdynamic_cast <>参照に。 それがスローされます。

std::bad_cast

私はあなた自身のことで、この1を投げるのは良いアイデアであることを確認していません。

私はそれが論理エラーであるため、logic_errorと、誰かが間違ったパラメータが渡された場合にはその誘導体を使用することを好む:引数のプログラマ渡さ間違ったタイプ。

しかし、私はそのような場合にアサートを使用したいすべてのより。あなたの関数に間違った値やタイプを渡すようなものが唯一の開発と、そのようなチェックで許容することができますのでリリースでは避けるべきです。

あなたは、標準の例外をスローしたり、独自のロールバックすることができます。あなたが投げている例外に追加情報を含めることができ、そしてそれはあなた自身を行うには十分な理由になります。

個人的に、私は私が働いてきたシステムのチェックインなどのドメインを見ていません。それは確かに普遍的ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top