【发布时间】:2017-06-22 17:25:23
【问题描述】:
在 lambdas 中需要关键字 mutable,这是非常混乱的根源。
考虑代码:
int x = 10;
function<void()> lambda = [=]() mutable {x++; cout << "Inside lambda: x = " << x << "\n";};
cout << "Before lambda: x = " << x << "\n";
lambda();
cout << "After lambda: x = " << x << "\n\n";
输出:
Before lambda: x = 10
Inside lambda: x = 11
After lambda: x = 10
正如我们所见,变量 x 在 lambda 之后保持不变,因此没有副作用。
但是,如果我们“忘记”关键字 mutable,就会出现错误。
作为在 C++ 中按值传递默认值的参数,对我来说需要 mutable 关键字没有任何意义。
有人可以编写(即使是伪代码)编译器生成的类来代替 lambda 吗?
谢谢
【问题讨论】: