Objek fungsi STL boleh mengendalikan pengecualian. Algoritma STL secara automatik menangkap pengecualian yang dilemparkan oleh objek fungsi melalui pernyataan tangkapan dan memajukannya ke fungsi yang memanggil algoritma, dengan itu memastikan pengendalian pengecualian yang betul.
Cara objek fungsi dalam STL mengendalikan pengecualian
Objek fungsi ialah jenis ringan yang boleh dipanggil dalam STL, yang boleh digunakan sebagai fungsi untuk mengendalikan elemen dalam algoritma bekas. Walaupun objek fungsi mungkin membuang pengecualian semasa memproses elemen, algoritma STL mengendalikan pengecualian ini secara automatik.
Mekanisme pengendalian pengecualian
Algoritma STL menggunakan pernyataan tangkapan untuk mengendalikan pengecualian yang dilemparkan oleh objek fungsi. Apabila algoritma perlu memanggil objek fungsi, ia membungkus objek fungsi dalam kelas dalaman yang mengandungi fungsi operator() yang memanggil kaedah objek fungsi. Jika fungsi operator() melemparkan pengecualian, pernyataan tangkapan menangkapnya dan memajukannya ke fungsi yang dipanggil algoritma.
Kes praktikal
Berikut ialah contoh kod yang menggunakan algoritma STL dan objek fungsi untuk mengendalikan pengecualian:
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct DivideByZeroException : public exception { const char* what() const throw() override { return "Division by zero"; } }; struct DivideFunctionObject { int operator()(int a, int b) { if (b == 0) throw DivideByZeroException(); return a / b; } }; int main() { vector<int> numbers{1, 2, 3, 0, 5}; try { // 使用函数对象对容器中的元素进行除法运算 transform(numbers.begin(), numbers.end(), numbers.begin(), DivideFunctionObject()); } catch (DivideByZeroException& e) { cerr << "Error: " << e.what() << endl; } // 打印容器中的元素 for (int number : numbers) { cout << number << " "; } return 0; }
Output:
1 2 3 0 5
Dalam contoh ini, fungsi pembahagian operasi object.Object aFunction. Apabila ia cuba membahagikan nombor dengan sifar, ia membuang pengecualian DivideByZeroException. Algoritma STL akan menangkap pengecualian ini dan mengeluarkan mesej ralat, tetapi tidak akan mengganggu program. Program ini meneruskan pelaksanaan dan mencetak elemen yang tinggal, yang tidak terjejas oleh pengecualian.
Atas ialah kandungan terperinci Bagaimanakah objek fungsi dalam STL mengendalikan pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!