Dav*_*vid 6 c++ asynchronous c++11
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
Run Code Online (Sandbox Code Playgroud)
在打电话之前有没有办法检查未来是否会抛出get?我希望valid能检查......我真的不确定如何valid回归虚假.在promise没有设置值的情况下销毁它不会这样做.
有没有办法在调用get之前检查一个未来是否会抛出?
不,因为这将以某种方式等于接收将来存储的值.
我希望有效会检查......我不确定如何有效返回false.
如果未来是指只能通过创建一个共享的状态下有效将返回true std::async,std::packaged_task或std::promise.反例将是默认构造的std::future.有效的也将是错误的,一旦你已经呼吁get或share上的有效(有效==真)未来的一次.在无效(有效== false)未来上
调用除了valid或移动赋值运算符之外的任何其他函数是UB.
在没有设置值的情况下销毁承诺不会这样做.
不,如上所述,这不是有效的点,因为未来仍然指的是共享国家,只是另一方 - 承诺 - 没有实现.如果在破坏承诺时没有设置任何值或异常,则设置一个异常以指示破坏的承诺.
| 归档时间: |
|
| 查看次数: |
2502 次 |
| 最近记录: |