在构造时初始化 std future 的向量

Initilize a vector of std future at construction

考虑以下代码:

#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 中调用了移动构造函数,但事实并非如此。

future不可复制,只能移动

{ async(launch::async, someFunction) }

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