可变的 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