Cpp 例外処理

提供:yonewiki

C++に戻る


本来の表記は「C++ 例外処理」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。

※このページではC++にのみ存在する機能として、記事タイトルがC++ 例外処理になっています。

例外処理

 C++の例外処理は、プログラム実行中に発生するエラーや異常な状態に対処するための仕組みです。例外処理は、エラーが発生した箇所からエラーを処理するためのコードブロック(例外ハンドラ)に制御が移ることで、プログラムの安定性を向上させる役割を果たします。以下に、C++の例外処理に関する基本的な解説とコード例を示します。


例外の発生と捕捉:

 C++では、try ブロックで例外が発生する可能性のあるコードを囲み、catch ブロックで例外を捕捉して処理します。また、throw ステートメントを使用して明示的に例外を発生させることもできます。


#include <iostream>
#include <stdexcept>

int main() {
    try {
        // 例外が発生する可能性のあるコード
        int numerator, denominator;
        std::cout << "Enter numerator: ";
        std::cin >> numerator;
        std::cout << "Enter denominator: ";
        std::cin >> denominator;

        if (denominator == 0) {
            throw std::runtime_error("Division by zero is not allowed.");
        }

        double result = static_cast<double>(numerator) / denominator;
        std::cout << "Result: " << result << std::endl;
    } catch (const std::exception& e) {
        // 例外ハンドラ
        std::cerr << "Exception caught: " << e.what() << std::endl;
    }

    return 0;
}


 この例では、ユーザによって入力された分母が0の場合に std::runtime_error 例外が発生するようにしています。catch ブロックでは、std::exception クラスを基底クラスとして、標準的な例外クラスを捕捉しています。


カスタム例外クラスの作成:

 プログラム独自の例外クラスを作成することもできます。これにより、特定のエラー条件に対処するための細かい制御が可能になります。


#include <iostream>
#include <stdexcept>

class MyException : public std::exception {
public:
    const char* what() const noexcept override {
        return "Custom exception: Something went wrong.";
    }
};

int main() {
    try {
        // 例外が発生する可能性のあるコード
        throw MyException();
    } catch (const std::exception& e) {
        // 例外ハンドラ
        std::cerr << "Exception caught: " << e.what() << std::endl;
    }

    return 0;
}


catch 節の順序:

try ブロックで複数の種類の例外が発生する場合、catch 節の順序が重要です。最も派生した例外クラスの catch 節から順に評価され、最初にマッチしたものが実行されます。


try {
    // ...
} catch (const DerivedException& e) {
    // DerivedException を捕捉
} catch (const BaseException& e) {
    // BaseException を捕捉
}


 このように、catch 節を書くときは、より具体的な例外クラスから始め、基底クラスに続けて書くのが一般的です。


 C++の例外処理は強力で柔軟な仕組みですが、適切な使い方が求められます。過剰な例外の使用はプログラムの可読性を低下させ、パフォーマンスにも悪影響を及ぼす可能性があるため、慎重に扱うことが重要です。

 

C++に戻る