c++ - std::fill_n 的右值,是否只支持复制填充?

标签 c++

给定 std::futuresstd::vector

std::vector<std::future<void>> futures;

为什么 std::fill_n 提示我在传递右值时调用复制构造函数:

std::fill_n(std::back_inserter(futures), 10, std::async([]{ std::cout << "yo\n"; }));

error: use of deleted function future(const future&)

我的意思是,fill_n 不会收到一个 xvalue 吗?如果没有,为什么不呢?

最佳答案

std::fill_n 将给定对象的拷贝作为第三个参数传递,但第三个参数是不可复制的 future 对象,因为复制 future 没有意义。因此错误。

看来你需要这个:

std::generate_n(std::back_inserter(futures), 
                10, 
               []{  return std::async([]{ std::cout << "yo\n"; }); });

关于c++ - std::fill_n 的右值,是否只支持复制填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33022229/

相关文章:

c++ - 是否有可能每次都在随机地址处加载FORTRAN DLL?

java - 如何使用opencv计算人脸识别的百分比格式预测置信度?

iphone - EXC_BAD_ACCESS 和 char 指针转换为浮点指针

c++ - 涉及函数类型的表达式是左值还是右值?

c++ - 这个 typedef 语句中的语法是做什么的?

c++ - 如何在 Linux 上构建 "lzma sdk"

c++ - 如何在 double 中存储 chrono 的时间?

c++ - 是什么让这个 "declarator invalid"? C++

c++ - VC++ 中的光纤安全优化到底是什么?

c++ - pragmas simd 和 ivdep vector 之间的区别总是?