在成员函数中编写 lambda 函数时,有没有办法按值捕获封闭类的字段?默认包罗万象 =
不起作用,因为当我在 lambda 中引用变量时,我会从捕获的 this 指针中解引用,并在捕获列表中显式命名变量,因为我得到两个编译错误:capture of non-variable <name>
, 和 ‘this’ was not captured for this lambda function
最佳答案
不,不能按值捕获数据成员。一个 lambda 只能捕获两种东西:
this
指针,以及- 非静态局部变量(即具有自动存储期限的变量)。
正如 ildjarn 在评论中所指出的,您可以使用数据成员的值的拷贝创建一个局部变量,并按值捕获该局部变量。
我认为如果允许对数据成员进行显式按值捕获,这可能会令人困惑,因为显式捕获的行为与隐式捕获的行为不同。例如,给定一个名为 m
的 int
类型的可访问数据成员,以下会产生不同的结果会很奇怪:
[=] () mutable { m = 1; } // we modify this->m
[=m]() mutable { m = 1; } // we modify the copy of m that was captured
关于c++ - 按值类成员捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944002/