Heim > Artikel > Backend-Entwicklung > Wie teilt man die Ausnahmehierarchie in der Ausnahmebehandlung von C++-Funktionen auf?
Die Ausnahmehierarchie in C++ bietet verschiedene Vererbungsebenen von Ausnahmeklassen zur Klassifizierung von Ausnahmesituationen. Diese Hierarchie hat ihren Ursprung in der Klasse std::Exception und umfasst Basisausnahmen, Laufzeitausnahmen und logischere Ausnahmeklassen, die von diesen Basisklassen abgeleitet werden. Durch den Ausnahmebehandlungsmechanismus können Ausnahmen auf verschiedenen Ebenen abgefangen und bei Bedarf entsprechende Maßnahmen ergriffen werden.
Ausnahmehierarchie in der C++-Funktionsausnahmebehandlung
In C++ kann die Funktionsausnahmebehandlung Ausnahmen melden, indem sie Ausnahmeobjekte auslöst. Um verschiedene Ausnahmesituationen zu klassifizieren, führt C++ die Ausnahmehierarchie ein. Die Ausnahmehierarchie ist eine Vererbungshierarchie von Ausnahmeklassen, die von der Standardbibliothek definiert werden und unterschiedliche Informationsebenen für Ausnahmeobjekte bereitstellen. 1. Ausnahmeklassen-Vererbungshierarchie Ausnahmeklassen in verschiedene Ebenen:
Basic Exception (std::Exception): Die Basisklasse, die alle Ausnahmesituationen darstellt.
Logische Ausnahme (std::logic_error)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
: Zeigt Fehler in der Programmlogik an, z. B. ungültige Parameter oder ungültiger Status.
std::runtime_error
und std::logic_error
abgeleitet, zum Beispiel: 🎜std::invalid_argument
: Ungültiger Parameter. std::range_error
: Bereichsfehler (z. B. Array-Index außerhalb der Grenzen). denominator
0 ist, löst diese Funktion den Code std::invalid_argument aus >Ausnahme. Diese Ausnahme gehört zur Ebene <code>std::logic_error
und stellt einen ungültigen Parameterfehler in der Programmlogik dar. 🎜🎜Wenn Sie die Funktion divide
aufrufen, können Sie den Ausnahmebehandlungsmechanismus verwenden, um Ausnahmen abzufangen: 🎜rrreee🎜Wenn in diesem Fall der Nenner
0 ist, wird std::invalid_argument löst eine Ausnahme aus und gibt eine Fehlermeldung aus. 🎜Das obige ist der detaillierte Inhalt vonWie teilt man die Ausnahmehierarchie in der Ausnahmebehandlung von C++-Funktionen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!