可变的 lambdas

默认情况下,lambda 的隐式 operator()const。这不允许在 lambda 上执行非 const 操作。为了允许修改成员,lambda 可以标记为 mutable,这使得隐含的 operator()const

int a = 0;

auto bad_counter = [a] {
    return a++;   // error: operator() is const
                  // cannot modify members
};

auto good_counter = [a]() mutable {
    return a++;  // OK
}

good_counter(); // 0
good_counter(); // 1
good_counter(); // 2