C++11 mutable

#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;
}