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