写的是创建两个线程,末尾设定值
#include <iostream>
#include <vector>
#include <future>
#include <thread>
using namespace std;
int F_1(future<int>& sum_1) {
this_thread::sleep_for(chrono::seconds(sum_1.get()));
return 0;
}
int main() {
vector<future<int>> futs;
vector<promise<int>> pros;
vector<future<int>> futs_0;
for (int i = 0; i < 2; i++) {
promise<int> pro_1;
pros.emplace_back(move(pro_1));
futs_0.emplace_back(move(pros[i].get_future()));
auto it = async(launch::async | launch::deferred, F_1, ref(futs_0[i]));
futs.emplace_back(move(it));
}
pros[0].set_value(1);
pros[1].set_value(2);
}
报错
但是这一段代码没错,我改一下代码——把其中的future容器删去了又可以跑了
```c++
#include <iostream>
#include <vector>
#include <future>
#include <thread>
using namespace std;
int F_1(future<int>& sum_1) {
this_thread::sleep_for(chrono::seconds(sum_1.get()));
return 0;
}
int main() {
vector<future<int>> futs;
vector<promise<int>> pros;
vector<future<int>> futs_0;
for (int i = 0; i < 2; i++) {
promise<int> pro_1;
pros.emplace_back(move(pro_1));
//这中间变了
future<int> fut_0=pros[i].get_future();
auto it = async(launch::async | launch::deferred, F_1, ref(fut_0));
//这中间变了
futs.emplace_back(move(it));
}
pros[0].set_value(1);
pros[1].set_value(2);
}
我想问问为什么我之前的那个会报错