[[C++とnetwork programming]] class を構築するにあたり、例外処理を考えておく必要がある。 一つのやりかたとして例外を投げずに個々の関数が状態を返すように する方法がある。これは C など手続型言語でよく採用される方法で 逐次戻り値をチェックする必要がある。 もう一つは例外 object を投げる(throw)方法であるが、 object としては例えば原始的な int でも構わない。 しかし int では区別が大変である。そこで、class object を 投げたくなる。 C++ では標準ヘッダ <exception> に std::exception という class が用意されている。これを基底 class として <stdexcept> には std::logic_error (及びその派生 class である std::domain_error, std::invalid_argument, std::length_error, std::out_of_range) と std::runtime_error (及びその派生 class で ある std::range_error, std::overflow_error, std::underflow_error) が用意されている。 には以下の class が用意されている。 - std::logic_error 及び以下の派生 class -- std::domain_error -- std::invalid_argument -- std::length_error -- std::out_of_range - std::runtime_error 及び以下の派生 class -- std::range_error -- std::overflow_error -- std::underflow_error std::logic_error と std::runtime_error (及びそれらの派生 class) の constructor は string への参照を引数として持つ。 また、文字列への pointer を返す what() という仮想関数が用意されており、 これにより文字列として出力可能である。 従って、通常は std::logic_error もしくは std::runtime_error から派生させるのが妥当 であろう。