mutable关键字90%的作用
- 修饰成员属性,允许在原本不能修改成员属性的方法内,修改成员属性
- 修饰lambda,允许修改变量值
作用一
修饰成员属性,允许在原本不能修改成员属性的方法内,修改成员属性;
//const修饰的方法内本不能修改m_Name值,但m_Name被mutable修饰后,可以修改
class Player
{
private:
mutable std::string m_Name;
public:
const std::string& GetName() const{
m_Name = 12;
return m_Name;
}
};
或许认为把第二个const去除不就可以了,没有必要使用mutable,但如果类实例是常量时,调用就会出错,类实例常量能调用的方法是有限制的;
const Player player;
player.GetName();
作用二
修饰lambda,允许修改变量值
int x = 1;
//如果不加mutable,此时x是不被允许修改的
//这里的f维护着一个x的copy,每次调用f,x都在原先的基础上加
auto f = [=]() mutable{
x += 12;
std::cout << x << std::endl;
};
f();
f();
std::cout << x << std::endl;