Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah objek fungsi dalam STL mengendalikan pengecualian?

Bagaimanakah objek fungsi dalam STL mengendalikan pengecualian?

王林
王林asal
2024-04-26 08:09:02913semak imbas

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.

STL 中的函数对象如何处理异常?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn