我理解事物的方式,应使用assert
s检查编程错误和文档条件,这些条件永远不会发生,并且应将例外用于程序员控制以外的运行时错误(例如,从数据库中获得key_not_found
响应(
那么,为什么std::future_errc::no_state
是一件事情?该值的例外只有在访问没有有效状态的未来时才能抛出。程序员可以控制这一点。为什么不鼓励实施在发生这种情况时从失败的断言中中止或中止呢?是否存在用户可以从无状态恢复的情况?
例如,如果他们返回未从呼叫std::promise::get_future()
获取的未来,则它将没有任何有效的状态。或在将来两次致电get()
。
assert
离子主要是 是调试/您的开发功能。它们通常是通常在编译代码的发布版本时都没有。因此,虽然它们很友善,并且可以在开发代码时记录不变性和其他内容(并帮助您捕获错误(,但您不能始终依靠它们始终启用它们。另一方面, std::future_errc::no_state
不是不是只是一个调试的东西,并且将永远存在(除非您当然是那些被禁用(和RTTI(的人之一 - 但是在那种情况下,我有无需提供,也没有同情(。