一旦 std::future 已经被分配给 std::async() ,你可以重用它吗?

Emb*_*OOD 5 c++ asynchronous future std

我很好奇如果 astd::future被实例化并用于分配给一个std::async()操作的值,然后等待 完成.wait(),它可以重新分配给一个新async()操作吗?

以这个小代码片段为例:

int fib(int n)
{
  if (n < 3) return 1;
  else return fib(n-1) + fib(n-2);
}

int main()
{
    std::future<int> f1 = std::async(std::launch::async, [](){
        return fib(40);
    });
 
    f1.wait();
    
    std::cout << "f1 first operation: " << f1.get() << '\n';

    f1 = std::async(std::launch::async, [](){
        return fib(43);
    });

    std::cout << "f1 second operation: " << f1.get() << '\n';
}
Run Code Online (Sandbox Code Playgroud)

期货一旦使用过一次,是否可以简单地重新分配?

到目前为止,我还没有找到太多关于这方面的阅读材料,并且我很感兴趣这是否会为未来创造任何未定义的行为。

感谢任何信息并感谢您的帮助!

Use*_*ess 5

是的,没关系。

文档中明确描述了这一点operator=

future& operator=( future&& other ) noexcept;
Run Code Online (Sandbox Code Playgroud)

释放任何共享状态并将 other 的内容移动分配给 *this。赋值后,other.valid() == false和将产生与赋值前this->valid()相同的值。other.valid()