c++ - 在构造时初始化一个标准未来向量
问题描述
考虑以下代码:
#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
. 初始化器列表的所有元素都被认为是 const, reference。const
作为源对象的对象只能复制到目标向量中,不能移动,这就是代码编译失败的原因。
推荐阅读
- python-3.x - 使用 Python 3 通过 WIFI 将相机从一个 Raspberry Pi 播放到另一个
- javascript - 子组件没有设置从父组件传来的初始值:ReactJS
- excel - 如何在删除最后一个字符的同时复制数组并以双精度获得结果
- javascript - showDialogPopup 点击后刷新页面
- python - 关于 tensorflow 中的反向传播深度神经网络
- batch-file - 为什么输出中缺少命令 FOR 的 /D 选项中的字母 D?
- javascript - 如何将js小部件转换为amp组件
- python - 如何找到所有可能的参数和函数组合
- python - collatz func 在用 python 自动化无聊的东西
- react-redux - 有条件地连接组件时“对象作为 React 子项无效”Redux 错误?