简短的例子:
#include <iostream>
int main()
{
int n;
[&](){n = 10;}(); // OK
[=]() mutable {n = 20;}(); // OK
// [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
std::cout << n << "\n"; // "10"
}
Run Code Online (Sandbox Code Playgroud)
问题:为什么我们需要mutable
关键字?它与传统参数传递给命名函数有很大不同.背后的理由是什么?
我的印象是,按值捕获的整个点是允许用户更改临时值 - 否则我几乎总是更好地使用按引用捕获,不是吗?
有什么启示吗?
(顺便说一句,我使用的是MSVC2010.这应该是标准的AFAIK)