gpt4 book ai didi

c++ - future 、 promise 和异常(exception)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:50 25 4
gpt4 key购买 nike

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 之前检查 future 是否会抛出异常?我希望 valid 会检查...我不太确定如何让 valid 返回 false。在不设置值的情况下销毁 promise 不会这样做。

最佳答案

Is there any way to check if a future is going to throw before calling get?

不,因为这在某种程度上等于接收 future 存储的值。

I hoped valid would check... I'm not really sure how to get valid to return false.

如果 future 引用只能由 std::asyncstd::packaged_taskstd 创建的共享状态,则 Valid 将返回 true: : promise 。一个反例是默认构造的 std::future。一旦你在一个有效的(valid == true) future 调用了 getshare 一次,Valid 也将是 false。
在无效(有效 == false) future 调用 valid 或移动赋值运算符以外的任何其他函数是 UB。

Destroying the promise without setting a value doesn't do it.

不,如上所述,这不是有效点,因为 future 仍然指的是共享状态,只是另一方—— promise ——没有实现。如果在销毁 promise 时未设置任何值或异常,则会设置一个异常以指示违反 promise 。

关于c++ - future 、 promise 和异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com