Pengendalian pengecualian ialah ciri dalam C++ yang mengendalikan ralat dengan anggun Ia melibatkan balingan dan penangkapan pengecualian: Balingan pengecualian: Gunakan kata kunci lontaran untuk membuang pengecualian secara eksplisit atau biarkan pengkompil membuang pengecualian secara automatik. Penangkapan pengecualian: Gunakan blok cuba-tangkap untuk menangkap pengecualian dan melaksanakan operasi pengendalian pengecualian. Pertempuran praktikal: Dalam fungsi bahagi, buang pengecualian std::invalid_argument untuk mengendalikan kes di mana pembahagi adalah sifar. Petua: Gunakan spesifikasi pengecualian, tangkap hanya pengecualian yang anda perlukan, log pengecualian dan gunakan balingan semula jika sesuai.
Bagaimana untuk mengendalikan pengecualian dalam fungsi C++ dengan berkesan?
Pengendalian pengecualian ialah ciri penting dalam C++ yang membolehkan program pulih atau ditamatkan dengan anggun apabila ralat atau peristiwa yang tidak dijangka berlaku. Pengendalian pengecualian yang betul adalah penting kerana ia menghalang program anda daripada ranap dan mengekalkan keteguhannya.
Mekanisme pengendalian pengecualian
Dalam C++, pengecualian pada asasnya ialah kelas, yang diperoleh daripada kelas std::exception
. Apabila fungsi melontar pengecualian, ia membuang objek kelas itu atau subkelasnya. Anda boleh membuang pengecualian secara eksplisit dengan menggunakan kata kunci throw
atau anda boleh meminta pengkompil C++ secara automatik membuang pengecualian apabila ralat tertentu berlaku. std::exception
类派生。当函数抛出一个异常时,它会抛出该类或其子类的对象。可以通过使用 throw
关键字显式地抛出异常,也可以让 C++ 编译器在出现某些错误时自动抛出异常。
捕获异常
可以使用 try-catch
块来捕获异常。try
块包含可能引发异常的代码,而 catch
块(存在于 try
块之后)用于捕获任何抛出的异常并采取适当的操作。
try { // 可能引发异常的代码 } catch (std::exception& e) { // 捕获异常并采取操作 }
实战案例
让我们考虑一个函数 divide
,它将两个数字相除并返回结果。如果尝试除以零,此函数可能会抛出一个异常。
int divide(int a, int b) { if (b == 0) { throw std::invalid_argument("除数不能为零"); } return a / b; }
在调用 divide
函数时,我们可以使用 try-catch
块来处理潜在的异常。
int main() { try { int dividend = 10; int divisor = 5; int result = divide(dividend, divisor); std::cout << "结果:" << result << std::endl; } catch (std::invalid_argument& e) { std::cout << "错误:" << e.what() << std::endl; } return 0; }
提示和建议
catch (std::exception&)
try-catch
untuk menangkap pengecualian. Blok try
mengandungi kod yang mungkin membuang pengecualian, manakala blok catch
(yang wujud selepas blok try
) digunakan untuk menangkap sebarang yang dilemparkan pengecualian dan ambil tindakan Operasi yang betul. bahagi
, kita boleh menggunakan blok try-catch
untuk mengendalikan kemungkinan pengecualian. 🎜rrreee🎜🎜Petua dan Nasihat🎜🎜catch (std::exception&)
) kerana ia akan menangkap semua pengecualian, yang mungkin menyembunyikan ralat penting. 🎜🎜🎜Melog dan melaporkan pengecualian: 🎜Ini membantu dalam penyahpepijatan dan menganalisis atur cara apabila masalah timbul. 🎜🎜🎜Gunakan rethrow di mana sesuai: 🎜Jika anda menangkap pengecualian tetapi tidak dapat mengendalikannya, anda boleh melemparkannya semula untuk membiarkan pengendali atas mengendalikannya. 🎜🎜Atas ialah kandungan terperinci Bagaimana untuk mengendalikan pengecualian dalam fungsi C++ dengan berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!