Menyelesaikan masalah pengecualian fungsi C++: Fahami intipati pengendalian ralat

WBOY
Lepaskan: 2024-05-01 09:57:01
asal
1090 orang telah melayarinya

Pengendalian pengecualian menguruskan ralat dalam fungsi melalui pernyataan lempar dan tangkap. Pernyataan lontaran mencetuskan pengecualian, dan pernyataan tangkapan menangkap pengecualian berdasarkan jenis pengecualian. Adalah penting untuk menangkap pengecualian pada awal fungsi anda dan memberikan mesej ralat yang jelas. Pilih jenis pengecualian yang betul, gunakan blok tangkapan generik dengan berhati-hati dan kendalikan pengecualian yang tidak diketahui dengan sewajarnya dalam blok tangkapan generik.

C++ 函数异常疑难解答:理解错误处理精髓

Menyelesaikan masalah pengecualian fungsi C++: Memahami intipati pengendalian ralat

Pengendalian pengecualian adalah penting untuk mengendalikan ralat dan pengecualian dalam fungsi. Pengecualian dalam C++ dilaksanakan melalui pernyataan throw dan catch. throwcatch 语句实现。

throw 语句

throw 语句用于触发异常。它接收一个可抛出对象作为参数,该对象可以是标准异常类型(如 std::runtime_error)或自定义异常类型。

catch 语句

catch 语句用于捕获异常。它接受异常类型或泛型异常类型(std::exception)作为参数。如果抛出的异常类型与 catch 块的参数类型匹配,则执行 catch 块。

实战案例

考虑一个函数,该函数计算两个数字的除法:

double divide(double num1, double num2) {
  if (num2 == 0) {
    throw std::runtime_error("除数不能为 0");
  }
  return num1 / num2;
}
Salin selepas log masuk

现在考虑一个调用该函数并处理异常的主函数:

int main() {
  try {
    double result = divide(10, 2);
    std::cout << "结果:" << result << std::endl;
  }
  catch (std::runtime_error& e) {
    std::cout << "错误:" << e.what() << std::endl;
  }
  catch (...) {
    std::cout << "未知错误" << std::endl;
  }
  return 0;
}
Salin selepas log masuk

如果 num2 为 0,则 divide 函数将抛出 std::runtime_error 异常。主函数中的第一个 catch 块将捕获该异常并打印错误消息。如果抛出其他类型的异常,则将执行第二个 catch 块并打印“未知错误”。

理解错误处理精髓

  1. 及早捕获,妥善处理:尽可能在函数中及早捕获异常,并提供有意义的错误消息。
  2. 保持异常类型准确:使用的异常类型应准确描述异常。
  3. 谨慎使用泛型 catch 块:只有在无法预测异常类型时才使用泛型 catch 块(catch (...)
  4. pernyataan lempar
  5. lempar pernyataan digunakan untuk mencetuskan pengecualian. Ia menerima objek boleh lempar sebagai parameter, yang boleh menjadi jenis pengecualian standard (seperti std::runtime_error) atau jenis pengecualian tersuai.
🎜🎜 catch pernyataan 🎜🎜🎜 catch pernyataan digunakan untuk menangkap pengecualian. Ia menerima jenis pengecualian atau jenis pengecualian generik (std::exception) sebagai parameter. Jika jenis pengecualian yang dilemparkan sepadan dengan jenis hujah blok tangkapan, blok tangkapan akan dilaksanakan. 🎜🎜🎜Contoh Praktikal🎜🎜🎜Pertimbangkan fungsi yang mengira pembahagian dua nombor: 🎜rrreee🎜Sekarang pertimbangkan fungsi utama yang memanggil fungsi dan mengendalikan pengecualian: 🎜rrreee🎜Jika nombor2 ialah 0, maka divid fungsi code> akan membuang pengecualian std::runtime_error. Blok catch pertama dalam fungsi utama akan menangkap pengecualian dan mencetak mesej ralat. Jika jenis pengecualian lain dilemparkan, blok tangkapan kedua akan dilaksanakan dan "Ralat Tidak Diketahui" akan dicetak. 🎜🎜🎜Fahami intipati pengendalian ralat🎜🎜
    🎜🎜Tangkap awal dan kendalikannya dengan betul: 🎜Tangkap pengecualian seawal mungkin dalam fungsi dan berikan mesej ralat yang bermakna. 🎜🎜🎜Pastikan jenis pengecualian tepat: 🎜Jenis pengecualian yang digunakan harus menerangkan pengecualian dengan tepat. 🎜🎜🎜Gunakan blok tangkapan generik dengan berhati-hati: 🎜Gunakan blok tangkapan generik (tangkapan (...)) hanya apabila jenis pengecualian tidak dapat diramalkan. 🎜🎜🎜Pengendalian pengecualian yang tidak diketahui dengan betul: 🎜Dalam blok tangkapan generik, pastikan pengecualian yang tidak diketahui dikendalikan dengan sewajarnya, seperti pembalakan atau penamatan proses. 🎜🎜

Atas ialah kandungan terperinci Menyelesaikan masalah pengecualian fungsi C++: Fahami intipati pengendalian ralat. 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