std::promise<int> p1;
auto f = p1.get_future();
{
std::promise<int> p2(std::move(pr));
}
bool valid = f.valid(); // true
f.wait(); // does not throw, or fail, but returns immediately
f.get(); // throws an exception
有没有什么办法可以在致电get
之前检查未来是否会抛出?我希望valid
会检查...我真的不知道如何让valid
返回false。销毁promise
而不设置值不会执行此操作。期货,承诺和例外
'std :: future'可以被看作是std :: promise'状态的观察者。如果诺言消失了,未来就是悬崖勒马。这不是UB,因为sehe说,但你得到一个'std :: broken_promise'异常,因为承诺永远不能满足。 – Xeo 2013-03-17 23:47:10
一旦您调用'get'或'share'一次,valid将返回false。 – inf 2013-03-17 23:57:11
[future :: valid](http://en.cppreference.com/w/cpp/thread/future/valid)表示“检查未来是否指向共享状态”。如果承诺没有了,价值从未设置,那不是说没有共享状态吗? – David 2013-03-17 23:57:27