>  기사  >  백엔드 개발  >  C++ 함수 예외 처리에서 예외 계층 구조를 나누는 방법은 무엇입니까?

C++ 함수 예외 처리에서 예외 계층 구조를 나누는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-04-15 18:48:021080검색

C++의 예외 계층 구조는 예외 상황을 분류하기 위해 다양한 예외 클래스 상속 수준을 제공합니다. 이 계층 구조는 std::Exception 클래스에 뿌리를 두고 있으며 기본 예외, 런타임 예외 및 논리적 예외를 포함합니다. 이러한 기본 클래스에서 파생됩니다. 예외 처리 메커니즘을 통해 다양한 수준의 예외를 포착하고 필요에 따라 해당 조치를 취할 수 있습니다.

C++ 函数异常处理中的异常层级如何划分?

C++ 함수 예외 처리의 예외 계층 구조

C++에서 함수 예외 처리는 예외 개체를 발생시켜 예외를 보고할 수 있습니다. 다양한 예외 상황을 분류하기 위해 C++에서는 예외 계층 구조를 도입합니다. 예외 계층은 예외 개체에 대한 다양한 수준의 정보를 제공하는 표준 라이브러리에 의해 정의된 예외 클래스의 상속 계층입니다.

1. 예외 클래스 상속 계층

예외 계층은 std::Exception 클래스를 루트로 하는 상속 계층입니다: std::exception 类为根的继承层次结构:

class std::exception {
public:
    virtual ~exception() noexcept = default;
    virtual const char* what() const noexcept = 0;
};

// 基本异常类
class std::runtime_error : public std::exception {
public:
    runtime_error(const char* whatArg) : whatArg_(whatArg) {}
    virtual const char* what() const noexcept override { return whatArg_; }

private:
    const char* whatArg_;
};

// 派生异常类
class std::logic_error : public std::runtime_error {
public:
    logic_error(const char* whatArg) : runtime_error(whatArg) {}
};

2. 异常层级划分

异常层级将异常类分为不同的级别:

  • 基础异常 (std::exception):表示所有异常情况的基类。
  • 运行时异常 (std::runtime_error):表示在程序运行时发生的异常,例如内存分配失败或文件打开失败。
  • 逻辑异常 (std::logic_error):表示程序逻辑中的错误,例如非法参数或无效状态。

更具体的异常类从 std::runtime_errorstd::logic_error 衍生,例如:

  • std::bad_alloc:内存分配失败。
  • std::invalid_argument:无效参数。
  • std::range_error:范围错误(例如,数组下标越界)。

3. 实战案例

考虑以下函数:

int divide(int numerator, int denominator) {
    if (denominator == 0) {
        throw std::invalid_argument("denominator cannot be zero");
    }
    return numerator / denominator;
}

denominator 为 0 时,此函数抛出 std::invalid_argument 异常。该异常属于 std::logic_error 层级,表示程序逻辑中一个无效的参数错误。

在调用 divide 函数时,你可以使用异常处理机制来捕获异常:

try {
    int result = divide(10, 2);
    std::cout << "Result: " << result << std::endl;
} catch (const std::invalid_argument& e) {
    std::cerr << "Error: " << e.what() << std::endl;
}

在这种情况下,当 denominator 为 0 时,将捕获 std::invalid_argumentrrreee

🎜2. 계층 구조 예외 클래스를 여러 수준으로 나눕니다: 🎜
  • 🎜기본 예외(std::Exception)🎜: 모든 예외 상황을 나타내는 기본 클래스입니다.
  • 🎜런타임 예외(std::runtime_error)🎜: 메모리 할당 실패, 파일 열기 실패 등 프로그램 실행 중에 발생하는 예외를 나타냅니다.
  • 🎜논리 예외(std::logic_error)🎜: 잘못된 매개변수나 잘못된 상태 등 프로그램 논리의 오류를 나타냅니다.
🎜더 구체적인 예외 클래스는 std::runtime_errorstd::logic_error에서 파생됩니다. 예: 🎜
  • std::bad_alloc: 메모리 할당에 실패했습니다.
  • std::invalid_argument: 잘못된 매개변수입니다.
  • std::range_error: 범위 오류(예: 범위를 벗어난 배열 아래 첨자).
🎜🎜3. 실제 사례 🎜🎜🎜다음 함수를 고려하세요. 🎜rrreee🎜 denominator가 0이면 이 함수는 std::invalid_argument 코드를 발생시킵니다. >예외. 이 예외는 <code>std::logic_error 수준에 속하며 프로그램 논리의 잘못된 매개변수 오류를 나타냅니다. 🎜🎜 divide 함수를 호출할 때 예외 처리 메커니즘을 사용하여 예외를 잡을 수 있습니다: 🎜rrreee🎜이 경우 분모가 0이면 std::invalid_argument는 예외를 발생시키고 오류 메시지를 인쇄합니다. 🎜

위 내용은 C++ 함수 예외 처리에서 예외 계층 구조를 나누는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

관련 기사

더보기