はじめに
C++の例外処理は、プログラムの実行中に発生するエラーや異常な状態を扱うための重要な機能です。
1. 例外処理の基礎
1.1 例外とは
例外とは、プログラムの実行中に発生するエラーや予期しない状況を通知するための機構です。例外処理を用いることで、エラー発生時に適切な対策を講じ、プログラムのクラッシュを防ぐことができます。
1.2 try-catchブロックの基本構文
C++における例外処理は、try
、catch
、throw
のキーワードを使用します。
try {
// 例外が発生する可能性のあるコード
} catch (例外型 変数名) {
// 例外を処理するコード
}
2. 例外の投げ方とキャッチ方法
2.1 例外を投げる(throw)
例外はthrow
キーワードを使って投げます。投げられた例外は、対応するcatch
ブロックでキャッチされるまでスタックを巻き戻します。
void divide(int a, int b) {
if (b == 0) {
throw std::invalid_argument("ゼロで除算しようとしました。");
}
std::cout << "結果: " << a / b << std::endl;
}
2.2 例外をキャッチする(catch)
throw
された例外は、対応する型のcatch
ブロックでキャッチされます。
try {
divide(10, 0);
} catch (const std::invalid_argument& e) {
std::cerr << "エラー: " << e.what() << std::endl;
}
3. 標準例外クラス
C++標準ライブラリには、多くの例外クラスが用意されています。これらを活用することで、一般的なエラー状況を簡潔に扱えます。
3.1 主な標準例外クラス
-
std::exception
:すべての標準例外の基本クラス。 -
std::logic_error
:プログラムの論理エラーを示す。std::invalid_argument
std::domain_error
std::length_error
std::out_of_range
-
std::runtime_error
:実行時エラーを示す。std::overflow_error
std::underflow_error
std::range_error
4. 独自の例外クラスの作成
標準例外クラスでは対応できない特殊なエラー状況には、独自の例外クラスを作成します。
4.1 基本的な独自例外クラスの実装
class MyException : public std::exception {
private:
std::string message;
public:
explicit MyException(const std::string& msg) : message(msg) {}
const char* what() const noexcept override {
return message.c_str();
}
};
使用例:
try {
throw MyException("独自の例外が発生しました。");
} catch (const MyException& e) {
std::cerr << e.what() << std::endl;
}
5. まとめ
- 例外処理はエラーや異常を安全に扱うための重要な機構です。
try
、catch
、throw
を適切に使って、例外を投げてキャッチします。- 標準例外クラスを活用し、必要に応じて独自の例外クラスを作成します。
- 例外安全性を確保するために、リソース管理やプログラムの状態管理に注意します。