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