C++ 标准::未来与临时标准::承诺

C++ 标准::未来与临时标准::承诺,c++,promise,std,future,C++,Promise,Std,Future,我无法理解承诺如何与未来合作。 我有一个返回std::future的函数,如本例所示: std::future<int> calcSomeValue() { } 请参见上面代码中的注释。 当调用.get()时,future是否访问promise变量,其中promise已经实现?如果是这样的话,我会在这里大吃一惊 有谁能告诉我在这种特殊情况下如何返回std::future?Apromise-对象与共享状态关联(注意“共享”)。调用promise::get_future时,您将收到一个

我无法理解承诺如何与未来合作。 我有一个返回
std::future
的函数,如本例所示:

std::future<int> calcSomeValue() {
}
请参见上面代码中的注释。 当调用
.get()
时,future是否访问promise变量,其中promise已经实现?如果是这样的话,我会在这里大吃一惊


有谁能告诉我在这种特殊情况下如何返回
std::future

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

不规范,但参见cplusplus.com上的描述:

共享状态的生存期至少持续到最后一个对象 与之相关联的文件将被释放或销毁。因此 能够在最初获得它的允诺对象中存活,如果 也与未来有关


一旦承诺的值被设置,承诺和未来之间共享的共享状态对象也被设置。承诺不必在设定后继续存在。
std::promise
是你推送回复的邮箱,它不存储回复。这种设计对我来说很奇怪。如果您正在检查结果是否已准备就绪,则意味着外部工作人员可能正在计算结果。如果是这样的话,你就让另一个工人来做这个计算。@FrançoisAndrieux。谢谢!你有没有提到过医生说放弃承诺是安全的?这是否可能取决于实施情况?奇怪的是,我们正在处理一个非常罕见(每天一次)的计算(当然它看起来与此不同)和一个单线程的上下文切换环境。由于我们必须尽可能快地返回结果(从计算出的结果集中获取),所以现在我们不希望每次请求该值时都产生线程。
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(....)
    }
}