执行lambda表达式,发现报错,原因是:默认情况下,lambda 表达式是 const
的。这意味着你不能在 lambda 内部修改捕获的变量。
int main()
{
int a = 10;
auto b = [a]() {
a=a+1;
return a;
};
cout << b() << endl;
}
当加上mutable关键字,就可以改变捕获的变量
但是加上const之后,发现报错了,明明捕获的是a的副本,但是为什么还会报错呢?
原因:const
修饰符的影响是对整个变量的,当你捕获一个 const
变量时,即使是副本,这个副本也具有 const
特性,因此不能修改
int main()
{
const int a = 10;
auto b = [a]()mutable {
a=a+1;
return a;
};
cout << b() << endl;
}