#include<iostream> using namespace std; //mutable int main00() { int a = 10; //auto f = [a]() { // return ++a;//[a]只是单纯的将a捕获住了,a的性质仍然为const,不能修改,所以报错。 // //如果想要修改a的值,需要加关键字mutable //};
//按值捕获,所以内部的a无论如何修改都不会影响外面的值,所以a的值为10 auto f = [a]()mutable {//使用mutable捕获的时候,在匿名函数的作用于范围内, //这个a是独自拥有的拷贝,和main函数里面的a不是同一份数据 //不会影响外部的a,维持的是自己的变量。 return ++a; }; auto f2 = [a]()mutable { return ++a; }; cout << f() << endl;//11 cout << f2() << endl;//11,与上一个lambda表达式的a的值没有关系。 cout << f() << endl;//12 cout << f2() << endl;//12 cout << a << endl;//10 return 0; }