Skip to content

C++自定义异常的使用

定义自定义异常类

首先,定义一个或多个自定义异常类来表示不同类型的异常情况。这些自定义异常类应该从 std::exception 类或其子类派生。

cpp
#include <exception>

class MyException : public std::exception {
public:
    virtual const char* what() const throw() {
        return "My custom exception";
    }
};

抛出异常

当遇到异常情况时,使用 throw 语句抛出一个异常。可以抛出自定义异常类的对象,或者使用标准库提供的异常类。

cpp
void someFunction() {
    // ...
    throw MyException();
    // ...
}

捕获异常

使用 try 块来捕获可能抛出的异常。在 try 块中,你可以使用一个或多个 catch 块来捕获特定类型的异常,并执行相应的处理逻辑。

cpp
try {
    someFunction();
} catch (const MyException& e) {
    // 处理 MyException 类型的异常
    std::cout << "Caught exception: " << e.what() << std::endl;
} catch (const std::exception& e) {
    // 处理其他类型的异常
    std::cout << "Caught exception: " << e.what() << std::endl;
} catch (...) {
    // 处理未知类型的异常
    std::cout << "Caught unknown exception" << std::endl;
}

统一的异常处理逻辑

为了实现统一的异常处理,将捕获异常和处理逻辑放在一个统一的地方,以确保所有的异常都经过相同的处理逻辑。

cpp
int main() {
    try {
        // 程序的主要逻辑
    } catch (const MyException& e) {
        // 处理 MyException 类型的异常
        std::cout << "Caught exception: " << e.what() << std::endl;
    } catch (const std::exception& e) {
        // 处理其他类型的异常
        std::cout << "Caught exception: " << e.what() << std::endl;
    } catch (...) {
        // 处理未知类型的异常
        std::cout << "Caught unknown exception" << std::endl;
    }
    
    return 0;
}

异常处理应该在适当的地方进行,以便在异常发生时能够正确地处理异常情况。

基于 VitePress 构建