在我看来,assert应该用来检查编程错误和记录不应该发生的条件,异常应该用来处理程序员无法控制的运行时错误(例如,从数据库获取key_not_found响应)。
那么为什么std::future_errc::no_state是一种东西呢?只有在访问不具有有效状态的未来时,才能引发具有该值的异常。这是程序员可以控制的。为什么不鼓励实现从失败的断言中中止,或者在发生这种情况时中止呢?是否存在用户能够从无状态异常中恢复的情况?
例如,如果它们返回一个未从std::promise::get_future()调用中获取的未来,那么它将不具有任何有效状态。或者两次给未来的get()打电话。
发布于 2017-06-03 00:53:55
assert离子主要是一种调试/开发时的特性。在编译代码的发布版本时,它们通常会被省略。因此,虽然拥有它们很好,并且可以在您开发代码时记录不变量和其他内容(并帮助您捕获bug),但您不能依赖于它们始终处于启用状态。另一方面,std::future_errc::no_state不仅仅是一个调试的东西,而且会一直在那里(当然,除非你是那些在构建时禁用了异常(和rtti)的人之一-但在这种情况下,我没有什么可提供的,也没有同情心)。
https://stackoverflow.com/questions/44333854
复制相似问题