std :: future no_state异常vs断言

时间:2017-06-02 16:47:56

标签: c++ c++11 exception future assert

我理解事物的方式,assert应该用于检查编程错误和文档条件,这些条件应该永远不会发生,并且异常应该用于程序员控制之外的运行时错误(例如,从数据库中获得key_not_found响应)

那么为什么std::future_errc::no_state是一个东西呢?只有在访问未具有有效状态的future时,才能抛出该值的异常。这是程序员可以控制的东西。为什么不鼓励实现从失败的断言中止或在发生这种情况时中止?是否存在用户可能从无状态异常中恢复的情况?

例如,如果他们返回未通过调用std::promise::get_future()获取的未来,那么它将没有任何有效状态。或者在未来两次致电get()

1 个答案:

答案 0 :(得分:1)

assert离子主要是调试/正在开发的功能。在编译代码的发布版本时,它们通常被忽略。因此,虽然他们很高兴拥有并且可以在开发代码时记录不变量和其他内容(并帮助您捕获错误),但您不能总是依赖它们。 另一方面,std::future_errc::no_state 只是一个调试的东西,并且将永远存在(除非你是那些构建异常(和rtti)禁用的人之一 - 但是那个案子我没什么可提供的,也没有同情心。)