Bagaimanakah blok cuba/tangkap dalam pengendalian pengecualian fungsi C++ berfungsi?

WBOY
Lepaskan: 2024-04-15 21:27:01
asal
425 orang telah melayarinya

Dalam C++, cuba blok mengandungi kod yang mungkin membuang pengecualian, dan blok tangkap digunakan untuk mengendalikan jenis pengecualian tertentu. Blok cuba/tangkap membolehkan program menyambung semula atau meneruskan pelaksanaan dengan anggun, menghalang penamatan yang tidak dijangka. Apabila pengecualian berlaku, kawalan diserahkan kepada blok tangkapan dengan kelayakan jenis yang sepadan, seperti cuba { ... } tangkap (const std::exception& e) { ... }.

C++ 函数异常处理中的 try/catch 块如何工作?

Cara blok try/catch mengendalikan pengecualian fungsi dalam C++

Pengendalian pengecualian ialah mekanisme penting dalam pembangunan perisian, yang membolehkan program menyambung semula atau meneruskan pelaksanaan dengan anggun apabila pengecualian berlaku. Dalam C++, anda boleh menggunakan blok try dan catch untuk mengendalikan pengecualian yang dilemparkan dalam fungsi. trycatch 块来处理函数中引发的异常。

try/catch 块的工作原理

try 块用于包含可能引发异常的代码。如果 try 块中的代码成功执行,则直接跳到紧随其后的代码行中。如果 try 块中的代码引发异常,则控制权将传递给相应的 catch 块。

catch 块用于处理特定类型的异常,并且它后面总是紧跟类型限定符。例如,以下代码片段会处理 std::exception 类型的所有异常:

try {
  // 可能引发异常的代码
} catch (const std::exception& e) {
  // 处理异常
}
Salin selepas log masuk

实战案例

假设我们有一个函数 read_file(),它从文件中读取数据。该函数可能会引发 std::ifstream::failure 异常,如果文件不存在或无法读取。以下代码片段演示了如何使用 trycatch 块来处理该异常:

void read_file(const std::string& filename) {
  std::ifstream file(filename);

  // 文件读取操作可能会引发 std::ifstream::failure 异常
  try {
    // 读文件操作
  } catch (const std::ifstream::failure& e) {
    std::cerr << "读取文件失败: " << e.what() << std::endl;
  }
}
Salin selepas log masuk

在这种情况下,如果 read_file() 函数无法成功读取文件,程序将打印错误消息并继续执行。

注意:

  • 每个 try 块可以有多个 catch 块,每个 catch 块用于处理不同的异常类型。
  • 如果 try 块中的代码未引发异常,则不会执行任何 catch
  • Cara cuba/tangkap blok berfungsi
🎜cuba blok digunakan untuk mengandungi kod yang mungkin membuang pengecualian. Jika kod dalam blok try berjaya dilaksanakan, lompat terus ke baris kod yang mengikuti serta-merta. Jika kod dalam blok try melemparkan pengecualian, kawalan diserahkan kepada blok catch yang sepadan. 🎜🎜Blok catch digunakan untuk mengendalikan pengecualian jenis tertentu dan ia sentiasa diikuti oleh kelayakan jenis. Sebagai contoh, coretan kod berikut mengendalikan semua pengecualian jenis std::exception: 🎜rrreee🎜🎜Kes Sebenar 🎜🎜🎜Andaikan kita mempunyai fungsi read_file() yang bermula daripada Baca data daripada fail. Fungsi ini mungkin menimbulkan pengecualian std::ifstream::failure jika fail tidak wujud atau tidak boleh dibaca. Coretan kod berikut menunjukkan cara menggunakan blok try dan catch untuk mengendalikan pengecualian ini: 🎜rrreee🎜Dalam kes ini, jika read_file() The fungsi tidak berjaya membaca fail, program mencetak mesej ralat dan meneruskan pelaksanaan. 🎜🎜🎜Nota:🎜🎜
    🎜Setiap blok try boleh mempunyai berbilang blok catch, setiap blok catch digunakan untuk memproses Pengecualian yang berbeza jenis. 🎜🎜Jika kod dalam blok try tidak memberikan pengecualian, tiada blok catch akan dilaksanakan. 🎜🎜Jika pengecualian yang tidak dikendalikan terlepas daripada fungsi, program akan ditamatkan melainkan terdapat pengendali yang tidak ditentukan. 🎜🎜

Atas ialah kandungan terperinci Bagaimanakah blok cuba/tangkap dalam pengendalian pengecualian fungsi C++ berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan