Promise和future,为什么主会成功退出呢?

Promise and future, why does the main exit successfully?

我开始在 C++11 中学习 promise 和 future,但我卡在了这里:

#include<iostream>
#include<future>
using namespace std;

void func(future<int> &ref)
{
    cout << ref.get();
}

int main()
{
    promise<int> prom;
    future<int> fut = prom.get_future();
    async(launch::deferred, func, ref(fut));
    prom.set_value(100);
    cout << "Exiting" << endl;
}

我的理解是,当我们有 asynclaunch::deferred 时,它不会启动新线程。

所以除非 ref.get() 执行 func 函数不会 return 这不会发生,因为 promise 是在那之后设置的。

但是我的代码成功退出了。我的理解哪里错了?

IDE: VS2013

deferred 异步调用只存储可调用对象和参数。

返回 future.

上调用 .get() 之前,什么都没有发生

您丢弃了返回的 future,因此您对 async 的调用基本上是空话。

没有其他因素阻止 main 完成,所以...