可变 lambda 是否具有自己的捕获值副本
Do mutable lambdas have their own copies of captured values?
std::function<void()> create_function (args...)
{
int x = initial_value (args...);
return [x] () mutable
{
std::cout << x++ << std::endl;
};
}
我发现我需要 lambda 上的 mutable
关键字,否则x
是 const。
如果我多次调用create_function
,返回的函数对象是每个都有自己的x
副本还是共享?
澄清一下,如果我想要 C++11 之前的这种功能,我必须编写一个类来封装捕获,在这种情况下,我可以选择x
成员变量或全局/静态。如果x
是常量,那就没关系了。语言如何指定与 lambda 的不同实例相关的x
存储?
如果
捕获的值是值或引用,mutable
不会更改。它只会改变恒常性。
您可以指定是否需要在 lambda 捕获中使用值(副本(或引用:
return [x] () mutable // copies
{
std::cout << x++ << std::endl;
};
return [&x] () mutable // references
{
std::cout << x++ << std::endl;
};
Lambda 捕获始终建模为非静态数据成员,如果这是您的困惑。
相关文章:
- 没有为自己的结构调用列表推回方法
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- C++从对象自己的类中删除对象
- 使用 std::optional,而不是自己的结构
- 子轴围绕父轴而不是他自己的轴旋转
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++ 如何为自己的迭代器类从迭代器转换为const_iterator?
- 重载 + 自己的类和 std::string 的运算符
- 类无法访问自己的私有静态 constexpr 方法 - Clang bug?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 如何访问模板参数自己的模板参数?
- 将矩阵乘以我自己的输入的向量
- 您应该在什么时候创建自己的异常类型
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- C++ 在其自己的类中创建对象的修改副本
- 使用 lambda 表达式创建线程时,如何为每个线程提供自己的 lambda 表达式副本
- 如何在每个共享库中使用自己的静态库副本
- 可变 lambda 是否具有自己的捕获值副本
- 每个文件都有自己的静态变量副本吗?