Обязательно ли вызывать promise.future () перед установкой значения? - PullRequest
4 голосов
/ 15 мая 2019

С http://www.cplusplus.com/reference/future/promise/get_future/:

После вызова этой функции ожидается, что в какой-то момент обещание подготовит свое общее состояние [...]

Я не уверен, подразумевает ли это, что этот порядок операций является обязательным:

  1. get_future ()
  2. set_value ()

Это также возможнополучить будущее из обещания только после того, как было установлено значение?

1 Ответ

2 голосов
/ 15 мая 2019

Насколько я вижу, такого ограничения нет. Единственные два случая, когда std::promise::set_value приводит к ошибке:

  1. Объект обещания не имеет общего состояния (это может произойти при перемещении объекта обещания):

    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 раньше.

...