mutablelambdas中关键字的需求是一个非常混乱的根源.
考虑一下代码:
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";
Run Code Online (Sandbox Code Playgroud)
输出:
Before lambda: x = 10
Inside lambda: x = 11
After lambda: x = 10
Run Code Online (Sandbox Code Playgroud)
我们可以看到,变量x在lambda之后保持不变,因此没有副作用.
但是,如果我们"忘记"关键字mutable,我们会收到错误.
作为通过值传递的参数是C++中的默认值,对我来说,mutable关键字的需求是没有意义的.
有人可以编写(甚至在伪代码中)编译器生成的类来代替lambda吗?
谢谢