代码之家  ›  专栏  ›  技术社区  ›  David Haim

什么是STD::未来:那么,当被调用不止一次?

  •  4
  • David Haim  · 技术社区  · 6 年前

    根据并发性TS,在下面的代码中应该发生什么?

    auto f0 = std::async([]{return 0;});
    auto f1 = f0.then([](auto& f){ return f.get() + 10; });
    auto f2 = f0.then([](auto& f){ if(!f.valid()) return; return f.get() + 10;});
    

    到执行第三行代码时, f0 已经有了延续,因此,根据TS,应该 0 抛出异常、中止程序、ub或具有不同的行为?我不清楚。

    1 回复  |  直到 6 年前
        1
  •  2
  •   clcto gnasher729    6 年前

    根据 cppreference ,未定义:

    将继续函数附加到 *this .如果 *这个 没有关联的共享状态(即, valid() == false )。

    ……

    函数返回后, valid() false .