简短的例子:
#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"
}
问题:为什么我们需要 mutable
关键字?它与传统的参数传递给命名函数完全不同。背后的原理是什么?
我的印象是,按值捕获的全部意义在于允许用户更改临时值——否则我几乎总是最好使用按引用捕获,不是吗?
有什么启示吗?
(顺便说一下,我正在使用 MSVC2010。AFAIK 这应该是标准的)
原文由 kizzx2 发布,翻译遵循 CC BY-SA 4.0 许可协议
它需要
mutable
因为默认情况下,函数对象每次调用时都应该产生相同的结果。这是面向对象函数和使用全局变量的函数之间的区别,有效。