std::future 临时 std::promise

std::future with temporary std::promise

我无法理解 promise 如何与 future 合作。 我有一个 returning std::future 的函数,就像这个例子中的那样:

std::future<int> calcSomeValue() {
}

我的问题是这个 future 可以异步计算生成一个线程,或者可以有一个结果已经准备好 return,所以我想用 [=] 编辑它 return 15=] 没有 运行 线程。但是……我不知道这是否安全,或者我还能做什么。 参见示例:

std::future<int> calcSomeValue() {
    if (resultIsReady()) {
        std::promise<int> promise; // on the stack
        std::future<int>  rv = promise.get_future(); // is future part of the memory occupied by promise?

        promise.set_value(resultThatIsReady); // does it store the value in promise or in future?
        return rv; // <--- What will happen when promise is lost?
    }
    else {
        return std::async(....)
    }
}

查看上面代码中的注释。 调用 .get() 时,未来是否会访问 promise 变量,其中 promise 已经实现?如果是那我就在这里大闹一场

任何人都可以告诉我如何在这种特殊情况下 return std::future 吗?

一个promise对象与一个共享状态相关联(注意"shared")。调用 promise::get_future 时,您将收到一个 future- 对象,该对象与与相应承诺对象关联的共享状态相同。这种状态至少与一个关联的生产者(即承诺)或消费者(即未来)存在的时间一样长。因此,promise 的生命周期是否在相应的 future 对象之前结束并不重要。

不规范,但参见 promise,如 cplusplus.com 所述:

The lifetime of the shared state lasts at least until the last object with which it is associated releases it or is destroyed. Therefore it can survive the promise object that obtained it in the first place if associated also to a future.