设置值之前是否必须调用promise.get_future()?

时间:2019-05-15 10:30:53

标签: c++ promise future

来自http://www.cplusplus.com/reference/future/promise/get_future/

  

调用此函数后,应允诺会在[...]某个时刻使其共享状态准备就绪

我不确定这是否意味着此操作顺序是强制性的:

  1. get_future()
  2. set_value()

只有在设定了值之后,才有可能从承诺中获得未来吗?

1 个答案:

答案 0 :(得分:2)

据我所知,没有这种限制。 std::promise::set_value导致错误的唯一两种情况是:

  1. Promise对象没有共享状态(在移动Promise对象时可能发生):

    promise<int> p;
    auto p2 = std::move(p);
    p.set_value(42); // error
    
  2. 共享状态已存储值或异常:

    promise<int> p;
    p.set_value(0);
    p.set_value(42); // error
    

    promise<int> p;
    try 
    {
        throw std::runtime_error("Some error");
    } 
    catch(...) 
    {
        p.set_exception(std::current_exception());
        p.set_value(42); // error
    }
    

但是get_future之前被调用没有限制。