C++의 예외 계층 구조는 예외 상황을 분류하기 위해 다양한 예외 클래스 상속 수준을 제공합니다. 이 계층 구조는 std::Exception 클래스에 뿌리를 두고 있으며 기본 예외, 런타임 예외 및 논리적 예외를 포함합니다. 이러한 기본 클래스에서 파생됩니다. 예외 처리 메커니즘을 통해 다양한 수준의 예외를 포착하고 필요에 따라 해당 조치를 취할 수 있습니다.
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::runtime_error
和 std::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_argument
rrreee
std::runtime_error
및 std::logic_error
에서 파생됩니다. 예: 🎜std::invalid_argument
: 잘못된 매개변수입니다. std::range_error
: 범위 오류(예: 범위를 벗어난 배열 아래 첨자). denominator
가 0이면 이 함수는 std::invalid_argument 코드를 발생시킵니다. >예외. 이 예외는 <code>std::logic_error
수준에 속하며 프로그램 논리의 잘못된 매개변수 오류를 나타냅니다. 🎜🎜 divide
함수를 호출할 때 예외 처리 메커니즘을 사용하여 예외를 잡을 수 있습니다: 🎜rrreee🎜이 경우 분모
가 0이면 std::invalid_argument는 예외를 발생시키고 오류 메시지를 인쇄합니다. 🎜위 내용은 C++ 함수 예외 처리에서 예외 계층 구조를 나누는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!