我不太明白为什么我们需要区分错误代码(std::error_code)和错误condition(std::error_condition),它们不是一回事吗?,错误条件和错误代码相比有什么优势?
(std::error_code)
condition(std::error_condition)
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的指针。
std::error:condition
std::error_code
error_code
error_condition
j0pj023g2#
我在这里找到了这个问题最简单的答案:http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-5.html.
std::error_condition
我认为它也适用于C++11。
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 errors和platform-independent errors都有一个代码和一个指向utility helper class的指针,用于将特定于域的错误代码Map到message。尽管有几乎相同的接口{assign,clear,value,message...},但它们不是从公共基类继承的,这意味着你不能通用地调用其中一个的方法。🤦♂️注意到std::error_code不是一个错误代码,而是一个错误代码+加上域/类别的组合,而std::errc是一个 * 实际 * 错误代码(一个数值)🙃。
std::errc
3条答案
按热度按时间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的指针。
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。
ih99xse13#
好的命名对理解有巨大的影响。随着C++11中引入的大量非常相似的命名错误...
......我不得不在脑海中画出一张Map,把它们都整理出来:
platform-dependent errors和platform-independent errors都有一个代码和一个指向utility helper class的指针,用于将特定于域的错误代码Map到message。尽管有几乎相同的接口{assign,clear,value,message...},但它们不是从公共基类继承的,这意味着你不能通用地调用其中一个的方法。🤦♂️
注意到
std::error_code
不是一个错误代码,而是一个错误代码+加上域/类别的组合,而std::errc
是一个 * 实际 * 错误代码(一个数值)🙃。