Jam*_*lis 30
不,数据成员无法按值捕获.lambda只能捕获两种东西:
this
指针,正如注释中的ildjarn所指出的,您可以创建一个带有数据成员值副本的局部变量,并按值捕获该局部变量.
我认为,如果允许对数据成员进行显式的按值捕获,则可能会造成混淆,因为显式捕获的行为与隐式捕获的行为不同.例如,给定一个类型int
为named 的可访问数据成员,m
以下将产生不同结果将是奇怪的:
[=] () mutable { m = 1; } // we modify this->m
[=m]() mutable { m = 1; } // we modify the copy of m that was captured
Run Code Online (Sandbox Code Playgroud)
小智 12
是的,只需编写[<new name>=<your class field>]
构造即可。例如:
class MyClass {
int a;
void foo() {
auto my_lambda = [a_by_val=a] {
// do something with a_by_val
}
my_lambda();
}
}
Run Code Online (Sandbox Code Playgroud)