首页 > 解决方案 > 在构造时初始化一个标准未来向量

问题描述

考虑以下代码:

#include <vector>
#include <future>

using namespace std;

void someFunction(){

  //do something
}

int main() {

  vector<future<void>> tasks1;

  tasks1.emplace_back(async(launch::async, someFunction));
  
  vector<future<void>> tasks2{ async(launch::async, someFunction) }; //doesn't compile

  vector<future<void>> tasks3{ move(async(launch::async, someFunction)) }; //doesn't compile

}

为什么 task2 和 task3 不编译?我假设在 tasks3 中调用了移动构造函数,但事实并非如此。

标签: c++asynchronousvectorfuture

解决方案


future不能复制,只能移动。

经过

{ async(launch::async, someFunction) }

future存储在initializer_list. 初始化器列表的所有元素都被认为是 const, referenceconst作为源对象的对象只能复制到目标向量中,不能移动,这就是代码编译失败的原因。


推荐阅读