#include <iostream>
#include <functional>
class Blub {
public:
int i = 0;
std::function<void()> create() const {
return [this]() {
this->i = 100;
};
}
};
int main() {
Blub blub = Blub();
blub.create()();
std::cout << blub.i << std::endl;
return 0;
}
我知道 this
在 lambda 中被捕获为 const,因为该方法被标记为 const。
除了删除方法的常量性之外,是否还有一种方法可以存档我可以修改 lambda 函数内的成员变量?
添加 mutable
关键字无效。
最佳答案
您可以将成员变量i
声明为mutable
,这样即使对象被声明为const
它也可以改变:
class Blub {
public:
mutable int i = 0;
// ^^^^^^^
std::function<void()> create() const {
return [this]() {
this->i = 100;
};
}
};
直播here .
关于c++ - const 方法中的非常量 lambda 捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60056637/