Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk membahagikan hierarki pengecualian dalam pengendalian pengecualian fungsi C++?
Hierarki pengecualian dalam C++ menyediakan tahap pewarisan kelas pengecualian yang berbeza untuk mengklasifikasikan situasi pengecualian. Hierarki ini berakar pada kelas std::exception dan termasuk pengecualian asas, pengecualian masa jalan dan pengecualian logik yang lebih khusus diperoleh daripada kelas asas ini. Melalui mekanisme pengendalian pengecualian, pengecualian pada tahap yang berbeza boleh ditangkap dan langkah yang sepadan diambil mengikut keperluan.
Hierarki pengecualian dalam pengendalian pengecualian fungsi C++
Dalam C++, pengendalian pengecualian fungsi boleh melaporkan pengecualian dengan membuang objek pengecualian. Untuk mengklasifikasikan situasi pengecualian yang berbeza, C++ memperkenalkan hierarki pengecualian. Hierarki pengecualian ialah hierarki warisan kelas pengecualian yang ditakrifkan oleh perpustakaan standard yang menyediakan tahap maklumat yang berbeza untuk objek pengecualian.
1. Hierarki warisan kelas pengecualian
Hierarki pengecualian ialah hierarki warisan dengan kelas std::exception
sebagai akarnya: 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
dan std::logic_error
, sebagai contoh: 🎜std::invalid_argument
: Parameter tidak sah. std::range_error
: Ralat julat (contohnya, subskrip tatasusunan di luar sempadan). denominator
ialah 0, fungsi ini membuang std::invalid_argument code >Pengecualian. Pengecualian ini tergolong dalam peringkat <code>std::logic_error
dan mewakili ralat parameter tidak sah dalam logik program. 🎜🎜Apabila memanggil fungsi bahagi
, anda boleh menggunakan mekanisme pengendalian pengecualian untuk menangkap pengecualian: 🎜rrreee🎜Dalam kes ini, apabila Atas ialah kandungan terperinci Bagaimana untuk membahagikan hierarki pengecualian dalam pengendalian pengecualian fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!