Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk menentukan dan membuang kod ralat untuk pengecualian tersuai?

Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk menentukan dan membuang kod ralat untuk pengecualian tersuai?

PHPz
PHPzasal
2024-05-09 14:09:02428semak imbas

Dalam pengendalian pengecualian C++, pengecualian tersuai dan kod ralat boleh memberikan maklumat ralat yang lebih terperinci. Anda boleh menentukan kelas pengecualian yang diperoleh daripada std::exception, termasuk pembolehubah dan fungsi ahli deskriptif, dan gunakan fungsi std::make_error_code() untuk membuang pengecualian yang mengandungi kod ralat. Selepas pengecualian ditangkap, mesej ralat boleh diakses daripada e.what() dan kod ralat daripada e.code() untuk pengendalian dan diagnosis ralat yang lebih cekap.

C++ 技术中的异常处理:如何为自定义异常定义和抛出错误码?

Pengendalian pengecualian dalam teknologi C++: pengecualian tersuai dan kod ralat

Dalam C++, pengendalian pengecualian ialah mekanisme berkuasa yang membolehkan kami mengendalikan situasi ralat dengan anggun, dengan itu meningkatkan kebolehbacaan dan kebolehbacaan kod. Mendefinisikan dan membuang pengecualian tersuai, bersama-sama dengan kod ralat, boleh memberikan maklumat ralat yang lebih khusus dan berguna, sekali gus membantu kami mendiagnosis dan menyelesaikan masalah dengan cepat.

Tentukan pengecualian tersuai

Untuk menentukan pengecualian tersuai, kita perlu mencipta kelas pengecualian yang diperoleh daripada std::exception. Kelas ini harus mengandungi pembolehubah ahli dan fungsi yang menerangkan ralat. std::exception 的异常类。该类应包含描述错误的成员变量和函数。

例如,我们可以定义一个名为 MyException 的异常类:

#include <stdexcept>
#include <string>

class MyException : public std::exception {
private:
    std::string message_;
public:
    MyException(const std::string& message) : message_(message) {}
    const char* what() const noexcept override { return message_.c_str(); }
};

抛出错误码

在抛出异常时,我们还可以包含一个错误码,以提供有关错误的附加信息。我们可以使用 std::make_error_code() 函数来创建错误码。

以下是向 MyException 异常添加错误码的示例:

#include <system_error>

throw MyException(std::make_error_code(std::errc::invalid_argument).message());

实战案例

考虑以下代码示例:

try {
    // 可能会引发错误的代码
    ...
} catch (const MyException& e) {
    // 处理错误,并从 e.what() 访问错误消息
    std::cerr << "Error: " << e.what() << std::endl;
    // 还可以从 e.code() 访问错误码
    std::cerr << "Error code: " << e.code().value() << std::endl;
}

注意事项

  • 确保自定义异常类具有描述性名称和消息,以清楚地传达错误情况。
  • 尽量避免使用通用错误码,如 std::errc::invalid_argument
  • Sebagai contoh, kita boleh mentakrifkan kelas pengecualian bernama MyException:
  • rrreee
  • Lempar kod ralat
🎜Apabila pengecualian dilemparkan, kami juga boleh memasukkan kod ralat untuk memberikan maklumat tentang ralat Tambahan Maklumat. Kita boleh menggunakan fungsi std::make_error_code() untuk membuat kod ralat. 🎜🎜Berikut ialah contoh menambahkan kod ralat pada pengecualian MyException: 🎜rrreee🎜Contoh praktikal🎜🎜Pertimbangkan contoh kod berikut: 🎜rrreee🎜Nota🎜
    🎜Pastikan tersuai anda kelas pengecualian adalah Nama deskriptif dan mesej untuk menyampaikan keadaan ralat dengan jelas. 🎜🎜Cuba elakkan menggunakan kod ralat biasa, seperti std::errc::invalid_argument. Sebaliknya, tentukan kod ralat anda sendiri untuk memberikan maklumat ralat yang lebih khusus. 🎜🎜Jika boleh, sertakan maklumat kontekstual tentang ralat yang dilemparkan untuk membantu nyahpepijat. 🎜🎜

Atas ialah kandungan terperinci Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk menentukan dan membuang kod ralat untuk pengecualian tersuai?. 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