Maison >développement back-end >C++ >Comment diviser la hiérarchie des exceptions dans la gestion des exceptions des fonctions C++ ?
La hiérarchie des exceptions en C++ fournit différents niveaux d'héritage de classes d'exception pour classer les situations d'exception. Cette hiérarchie est ancrée dans la classe std::exception et comprend des exceptions de base, des exceptions d'exécution et des exceptions logiques. Des classes d'exceptions plus spécifiques sont dérivées de ces classes de base. Grâce au mécanisme de gestion des exceptions, les exceptions à différents niveaux peuvent être détectées et les mesures correspondantes prises si nécessaire.
Hiérarchie des exceptions dans la gestion des exceptions des fonctions C++
En C++, la gestion des exceptions des fonctions peut signaler des exceptions en lançant des objets d'exception. Afin de classer différentes situations d'exception, C++ introduit la hiérarchie des exceptions. La hiérarchie des exceptions est une hiérarchie d'héritage de classes d'exceptions définies par la bibliothèque standard qui fournit différents niveaux d'informations pour les objets d'exception.
1. Hiérarchie d'héritage des classes d'exception
La hiérarchie des exceptions est la hiérarchie d'héritage avec la classe std::exception
comme racine : 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
et std::logic_error
, par exemple : 🎜std::invalid_argument
: paramètre non valide. std::range_error
: erreur de plage (par exemple, indice du tableau hors limites). denominator
est 0, cette fonction renvoie std::invalid_argument code >Exception. Cette exception appartient au niveau <code>std::logic_error
et représente une erreur de paramètre non valide dans la logique du programme. 🎜🎜Lors de l'appel de la fonction divide
, vous pouvez utiliser le mécanisme de gestion des exceptions pour intercepter les exceptions : 🎜rrreee🎜Dans ce cas, lorsque le dénominateur
est 0, il interceptera std::invalid_argument lève une exception et imprime un message d'erreur. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!