Rumah > Artikel > pembangunan bahagian belakang > Pengendalian pengecualian dan penentu pengecualian untuk fungsi C++
Pengendalian pengecualian mengendalikan ralat masa jalan, termasuk membaling, menangkap dan mengendalikan pengecualian. Penentu pengecualian digunakan untuk menentukan jenis pengecualian yang boleh dilemparkan oleh fungsi, termasuk noexcept(expr) (menentukan bahawa tiada pengecualian dilemparkan) dan throw() (menentukan bahawa sebarang jenis pengecualian boleh dilemparkan). Dalam kes sebenar, fungsi print_file menggunakan penentu throw() dan menggunakan blok try-catch untuk menangkap pengecualian std::runtime_error dalam fungsi utama dan mengendalikan ralat pembukaan fail.
Pengendalian pengecualian dan penentu pengecualian fungsi C++
Pengendalian pengecualian ialah mekanisme utama untuk mengendalikan ralat masa jalan Ia terbahagi kepada tiga bahagian: pengecualian lemparan, pengecualian penangkapan dan pengecualian pengendalian. Dalam C++, pengecualian diwakili oleh kelas pengecualian.
Lempar pengecualian
Gunakan kata kunci lempar
untuk membuang pengecualian. Kelas pengecualian atau sebarang objek dengan fungsi tertentu boleh berfungsi sebagai pengecualian. Contohnya: throw
关键字抛出异常。异常类或具有特定功能的任意对象都可以作为异常。例如:
throw std::runtime_error("失败!");
捕获异常
使用 try-catch
块捕获异常。try
块包含可能抛出异常的代码,而 catch
块指定如何处理不同类型的异常。例如:
try { // 可能抛出异常的代码 } catch (const std::runtime_error& e) { // 处理 std::runtime_error 异常 } catch (const std::exception& e) { // 处理所有其他异常 }
异常说明符
异常说明符添加到函数签名中,以指定函数可以抛出的异常类型。有两种异常说明符:
expr
为常量表达式。实战案例
考虑一个读取文件并将其打印到控制台的函数。该函数可能会由于文件不存在或访问被拒绝而引发异常。我们可以使用异常说明符和 try-catch
块来处理这些情况。
#include <iostream> #include <fstream> void print_file(const std::string& file_name) { std::ifstream file(file_name); if (!file.is_open()) throw std::runtime_error("无法打开文件!"); std::string line; while (std::getline(file, line)) { std::cout << line << std::endl; } } int main() { try { print_file("test.txt"); } catch (const std::runtime_error& e) { std::cerr << e.what() << std::endl; } return 0; }
在函数 print_file
中,异常说明符 throw()
指定该函数可以抛出任何类型的异常。在 main
函数中,我们使用 try-catch
块来处理异常。如果打开文件时发生错误,则会抛出 std::runtime_error
rrreee
try-catch
blok untuk menangkap pengecualian. Blok try
mengandungi kod yang mungkin membuang pengecualian, manakala blok catch
menentukan cara mengendalikan pelbagai jenis pengecualian. Contohnya: 🎜rrreee🎜🎜Penentukan pengecualian 🎜🎜🎜Penentukan pengecualian ditambahkan pada tandatangan fungsi untuk menentukan jenis pengecualian yang boleh dilemparkan oleh fungsi. Terdapat dua penentu pengecualian: 🎜expr
ialah ungkapan tetap. try-catch
untuk mengendalikan situasi ini. 🎜rrreee🎜Dalam fungsi print_file
, penentu pengecualian throw()
menentukan bahawa fungsi itu boleh membuang sebarang jenis pengecualian. Dalam fungsi utama
, kami menggunakan blok try-catch
untuk mengendalikan pengecualian. Jika ralat berlaku semasa membuka fail, pengecualian std::runtime_error
dilemparkan dan mesej ralat dicetak ke konsol. 🎜Atas ialah kandungan terperinci Pengendalian pengecualian dan penentu pengecualian untuk fungsi C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!