在构造时初始化 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
中。初始化列表的所有元素都被认为是常量,reference。 const
对象作为源对象只能复制到目标向量中,不能移动,所以代码编译失败。
考虑以下代码:
#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
中。初始化列表的所有元素都被认为是常量,reference。 const
对象作为源对象只能复制到目标向量中,不能移动,所以代码编译失败。