Rumah pembangunan bahagian belakang C++ Bagaimanakah objek fungsi dalam STL mengendalikan pengecualian?

Bagaimanakah objek fungsi dalam STL mengendalikan pengecualian?

Apr 26, 2024 am 08:09 AM
Pengendalian pengecualian stl

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;
}
Salin selepas log masuk

Output:

1 2 3 0 5
Salin selepas log masuk

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 Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL? Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL? Jun 05, 2024 am 11:50 AM

Melaksanakan pembanding tersuai boleh dicapai dengan mencipta kelas yang membebankan operator(), yang menerima dua parameter dan menunjukkan hasil perbandingan. Sebagai contoh, kelas StringLengthComparator mengisih rentetan dengan membandingkan panjangnya: Buat kelas dan operator beban lampau(), mengembalikan nilai Boolean yang menunjukkan hasil perbandingan. Menggunakan pembanding tersuai untuk mengisih dalam algoritma bekas. Pembanding tersuai membolehkan kami mengisih atau membandingkan data berdasarkan kriteria tersuai, walaupun kami perlu menggunakan kriteria perbandingan tersuai.

Bagaimanakah pengendalian pengecualian C++ menyokong rutin pengendalian ralat tersuai? Bagaimanakah pengendalian pengecualian C++ menyokong rutin pengendalian ralat tersuai? Jun 05, 2024 pm 12:13 PM

Pengendalian pengecualian C++ membolehkan penciptaan rutin pengendalian ralat tersuai untuk mengendalikan ralat masa jalan dengan membuang pengecualian dan menangkapnya menggunakan blok cuba-tangkap. 1. Buat kelas pengecualian tersuai yang diperolehi daripada kelas pengecualian dan ganti kaedah what() 2. Gunakan kata kunci lontaran untuk membuang pengecualian 3. Gunakan blok cuba-tangkap untuk menangkap pengecualian dan nyatakan jenis pengecualian yang boleh; dikendalikan.

Bagaimana untuk mendapatkan saiz bekas C++ STL? Bagaimana untuk mendapatkan saiz bekas C++ STL? Jun 05, 2024 pm 06:20 PM

Anda boleh mendapatkan bilangan elemen dalam bekas dengan menggunakan fungsi ahli saiz() bekas. Contohnya, fungsi saiz() bekas vektor mengembalikan bilangan elemen, fungsi saiz() bekas senarai mengembalikan bilangan elemen, fungsi panjang() bekas rentetan mengembalikan bilangan aksara dan kapasiti() fungsi bekas deque mengembalikan bilangan blok memori yang diperuntukkan.

Bagaimana untuk menangani perlanggaran cincang apabila menggunakan C++ STL? Bagaimana untuk menangani perlanggaran cincang apabila menggunakan C++ STL? Jun 01, 2024 am 11:06 AM

Kaedah untuk mengendalikan konflik cincang C++STL ialah: kaedah alamat rantai: menggunakan senarai terpaut untuk menyimpan elemen bercanggah, yang mempunyai kebolehgunaan yang baik. Kaedah pengalamatan terbuka: Cari lokasi yang tersedia dalam baldi untuk menyimpan elemen Sub-kaedah ialah: Pengesanan linear: Cari lokasi tersedia seterusnya dalam urutan. Pengesanan Kuadratik: Cari dengan melangkau kedudukan dalam bentuk kuadratik.

Apakah jenis biasa dalam bekas C++ STL? Apakah jenis biasa dalam bekas C++ STL? Jun 02, 2024 pm 02:11 PM

Jenis bekas yang paling biasa dalam C++STL ialah Vektor, Senarai, Deque, Set, Map, Stack dan Queue. Bekas ini menyediakan penyelesaian untuk keperluan penyimpanan data yang berbeza, seperti tatasusunan dinamik, senarai berganda dan bekas bersekutu berasaskan kunci dan nilai. Dalam amalan, kami boleh menggunakan bekas STL untuk menyusun dan mengakses data dengan cekap, seperti menyimpan gred pelajar.

Bagaimana untuk menggunakan C++ STL untuk mencapai kebolehbacaan dan kebolehselenggaraan kod? Bagaimana untuk menggunakan C++ STL untuk mencapai kebolehbacaan dan kebolehselenggaraan kod? Jun 04, 2024 pm 06:08 PM

Dengan menggunakan Pustaka Templat Standard (STL) C++, kami boleh meningkatkan kebolehbacaan dan kebolehselenggaraan kod: 1. Gunakan bekas untuk menggantikan tatasusunan primitif untuk meningkatkan keselamatan jenis dan pengurusan memori 2. Gunakan algoritma untuk memudahkan tugas yang rumit dan meningkatkan kecekapan; 3. Gunakan iterator untuk meningkatkan traversal dan memudahkan kod;

Bagaimana untuk mengisih bekas C++ STL? Bagaimana untuk mengisih bekas C++ STL? Jun 02, 2024 pm 08:22 PM

Cara mengisih bekas STL dalam C++: Gunakan fungsi sort() untuk mengisih bekas di tempatnya, seperti std::vector. Menggunakan bekas yang dipesan std::set dan std::map, elemen diisih secara automatik semasa sisipan. Untuk susunan isihan tersuai, anda boleh menggunakan kelas pembanding tersuai, seperti mengisih vektor rentetan mengikut abjad.

Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk mengendalikan pengecualian dengan betul dalam persekitaran berbilang benang? Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk mengendalikan pengecualian dengan betul dalam persekitaran berbilang benang? May 09, 2024 pm 12:36 PM

Dalam C++ berbilang benang, pengendalian pengecualian mengikut prinsip berikut: ketepatan masa, keselamatan benang dan kejelasan. Dalam amalan, anda boleh memastikan keselamatan benang bagi kod pengendalian pengecualian dengan menggunakan mutex atau pembolehubah atom. Selain itu, pertimbangkan kemasukan semula, prestasi dan ujian kod pengendalian pengecualian anda untuk memastikan ia berjalan dengan selamat dan cekap dalam persekitaran berbilang benang.

See all articles