C++ C++;捕获列表中的lambda拷贝值
我有一个计划如下:C++ C++;捕获列表中的lambda拷贝值,c++,c++11,lambda,C++,C++11,Lambda,我有一个计划如下: int main() { int val = 4; auto add = [val](int a)->int{ val += 2; return a+val; }; cout << add(3) << endl; cout << val << endl; return 0; } intmain() { int-val=4; 自动添加=[val
int main()
{
int val = 4;
auto add = [val](int a)->int{
val += 2;
return a+val;
};
cout << add(3) << endl;
cout << val << endl;
return 0;
}
intmain()
{
int-val=4;
自动添加=[val](int a)->int{
val+=2;
返回a+val;
};
cout操作符()除非lambda声明为可变的,否则lambda的
是隐式的const
——并且不能修改const
成员函数中的数据成员。无论捕获的类型如何,都会发生这种情况。在lambda内部,捕获的变量默认情况下是不可变的。这不取决于捕获的变量或以任何方式捕获它们的方式。相反,闭包类型的函数调用运算符声明为const
:
此函数调用运算符或运算符模板声明为const
(9.3.1)当且仅当lambda表达式
参数声明子句后面没有mutable
因此,如果希望使捕获的变量在主体内部可修改,只需将lambda更改为
auto add = [val] (int a) mutable -> int {
val += 2;
return a+val;
};
因此,
常量
-说明符被删除。只要通过引用捕获它,它就会工作
auto add = [&val](int a) -> int{
//
}
请不要这样做。它会一直工作到爆炸。@Steazy为什么会爆炸?