C++库 - <system_error>



C++中的<system_error>头文件提供了一种跨不同平台报告和处理系统相关错误的方法。它将特定于系统的错误代码封装到可移植、易于处理的C++对象中,从而能够在现代应用程序中进行错误处理。它将系统错误与特定于平台的API解耦,提供一个抽象层,以确保在不同的操作系统上保持一致的行为。

<system_error>包含两个类

  • error_code − 表示与特定系统错误关联的错误代码。它同时包含数字错误值和错误类别。
  • system_error − 它是一个从std::runtime_error派生的异常类,用于抛出包含系统相关错误信息的异常。

包含<system_error>头文件

要在你的C++程序中包含<system_error>头文件,可以使用以下语法。

#include <system_error>

<system_error>头文件的函数

以下是<system_error>头文件中所有函数的列表。

序号 函数及描述
1 assign

它分配另一个错误代码。

2 operator=

它赋值一个错误代码。

3 clear

它清除错误代码。

4 value

它获取error_code的值。

5 category

它获取此error_code的error_category。

6 default_error_condition

它获取此error_code的error_condition。

7 message

它获取此error_code的解释性字符串。

8 operator bool

它检查值是否非零。

非成员函数

序号 函数及描述
1 operator==

它比较两个error_code。

2 operator!=

它比较两个error_code。

3 operator<

它比较两个error_code。

4 operator<=>

它比较两个error_code。

5 operator<<

它将值和类别名称输出到输出流。

创建自定义错误

在下面的示例中,我们将使用std::error_code来创建自定义错误代码。

#include <iostream>
#include <system_error>
int main() {
   std::error_code x(1007, std::generic_category());
   std::cout << "Error code: " << x.value() << "\n";
   std::cout << "Error message: " << x.message() << "\n";
   return 0;
}

输出

上述代码的输出如下:

Error code: 1007
Error message: Operation not permitted

处理系统错误

考虑以下示例,我们将抛出一个std::system_error异常,其中包含一个指示权限被拒绝错误的错误代码。

#include <iostream>
#include <system_error>
int main() {
   try {
      throw std::system_error(std::make_error_code(std::errc::permission_denied));
   } catch (const std::system_error & x) {
      std::cout << "Caught error: " << x.what() << "\n";
      std::cout << "Error code: " << x.code() << "\n";
   }
   return 0;
}

输出

以下是上述代码的输出:

Caught error: Permission denied
Error code: generic:13
广告