我有一个程序如下:
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;
}
Run Code Online (Sandbox Code Playgroud)
Xcode中存在编译错误:无法分配给非可变lambda中的副本捕获的变量.
我的问题是:如果我们选择使用副本(使用"="或值名称),是否不能为此值分配新值或更改?
Col*_*mbo 17
在lambda中,捕获的变量默认是不可变的.这不取决于捕获的变量或以任何方式捕获它们的方式.相反,声明了闭包类型的函数调用操作符const
:
const
当且仅当lambda-expression的parameter-declaration-clause未后跟时,才声明此函数调用操作符或操作符模板(9.3.1)mutable
.
因此,如果要使捕获的变量在体内可修改,只需将lambda更改为
auto add = [val] (int a) mutable -> int {
val += 2;
return a+val;
};
Run Code Online (Sandbox Code Playgroud)
所以const
-specifier被删除了.
小智 6
只需通过引用捕获它,它就会起作用!!
auto add = [&val](int a) -> int{
//
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6654 次 |
最近记录: |