来自http://www.cplusplus.com/reference/future/promise/get_future/:
调用此函数后,应允诺会在[...]某个时刻使其共享状态准备就绪
我不确定这是否意味着此操作顺序是强制性的:
只有在设定了值之后,才有可能从承诺中获得未来吗?
答案 0 :(得分:2)
据我所知,没有这种限制。 std::promise::set_value
导致错误的唯一两种情况是:
Promise对象没有共享状态(在移动Promise对象时可能发生):
promise<int> p;
auto p2 = std::move(p);
p.set_value(42); // error
共享状态已存储值或异常:
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
之前被调用没有限制。