如何测试一个std::error_code不是错误?

17

我有一个返回std::error_code的方法,我对错误信息不是特别感兴趣,只关心方法是否成功。

最佳实践是如何测试std::error_code表示成功的操作?


4
你尝试过使用std::error_code::operator bool()吗?http://en.cppreference.com/w/cpp/error/error_code/operator_bool - roalz
1
true 表示成功还是失败? - sdgfsdh
如果value()等于0,则返回false,否则返回true。关于value等于零的含义:“std::error_code是一个平台相关的错误代码”。 - roalz
那么,没有一种平台无关的方法来测试 error_code 是否表示成功吗? - sdgfsdh
我找不到官方的参考资料,但我认为 error_code::value() == 0 表示成功。可以在这里找到一个非官方的参考(但是比较旧,适用于 c++0x):http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-2.html - roalz
说到底,只有实现该方法的“另一个程序员”才真正知道。我认为返回0表示“无错误”是惯例。 - Matthias Kauer
1个回答

18

我在使用ASIO库时遇到了类似的情况。正如他们的博客文章中所建议的那样,std::error_code应该按以下方式进行测试:

std::error_code ec;
// ...    
if (!ec)
{
  // Success.
}
else
{
  // Failure.
}

深入了解后,我找到这篇(更近期的)C++标准Google小组讨论,确认了上述说法,但也提出了关于std::error_code当前设计是否足够简单明了的问题。

简单来说,如果您只需要判断错误和成功,!static_cast<bool>(errorCode)就是您所需的。


1
谢谢。对我来说绝不简单。舍弃易用性追求工程纯粹主义的趋势正在持续发展。 - kakyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接