c++ 错误代码与错误条件

aydmsdu9  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(230)

我不太明白为什么我们需要区分错误代码(std::error_code)和错误condition(std::error_condition),它们不是一回事吗?,错误条件和错误代码相比有什么优势?

polkgigr

polkgigr1#

http://en.cppreference.com/w/cpp/error/error_condition开始
std::error_condition是与平台无关的错误代码。与std::error_code一样,它由整数值和std::error_category唯一标识,但与std::error_code不同的是,该值与平台无关。
因此,这样做的好处是,在使用std::error:condition时,错误代码并不特定于您正在使用的平台。
使用std::error_code
每个std::error_code对象保存一对来自操作系统或某个低级接口的错误代码
因此,error_code将引用特定于您的平台、硬件等的内容。
两者都使用可能是有利的。error_condition是"可移植抽象",因此将是提供给用户的一般错误消息,而error_code将是对特定调试有用的平台相关信息。
[error_condition]的典型实现包含一个整型数据成员(值)和一个指向std::error_category的指针。

j0pj023g

j0pj023g2#

我在这里找到了这个问题最简单的答案:http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-5.html.

  • std::error_code-表示由操作(例如系统调用)返回的特定错误值。
  • std::error_condition-您希望在代码中测试并可能对其做出React的对象。

我认为它也适用于C++11。

ih99xse1

ih99xse13#

好的命名对理解有巨大的影响。随着C++11中引入的大量非常相似的命名错误...

std::errc            - an error code
std::error_code      - a different error code?
std::error_condition - yet another kind of error code 🤔
std::error_category  - a utility helper interface for error codes 😵

......我不得不在脑海中画出一张Map,把它们都整理出来:

std::errc              -> std::posix_error_code
std::error_code        -> std::platform_dependent_error
std::error_condition   -> std::platform_independent_error
std::error_category    -> std::error_domain/utility/mapper
std::system_category   -> std::platform_dependent_error_domain
std::generic_category  -> std::platform_independent_error_domain
std::future_errc       -> std::future_error_code
std::future_category   -> std::future_error_domain
std::io_errc           -> std::iostream_error_code
std::iostream_category -> std::iostream_error_domain

platform-dependent errorsplatform-independent errors都有一个代码和一个指向utility helper class的指针,用于将特定于域的错误代码Map到message。尽管有几乎相同的接口{assign,clear,value,message...},但它们不是从公共基类继承的,这意味着你不能通用地调用其中一个的方法。🤦‍♂️
注意到std::error_code不是一个错误代码,而是一个错误代码+加上域/类别的组合,而std::errc是一个 * 实际 * 错误代码(一个数值)🙃。

相关问题