假设我们新建一个const类,并且想要通过类内方法直接原封不动地返回成员变量m_Name,此时代码使用const不会有任何问题,但是如果我还想要通过一个常量来记录debug的次数,此时就需要用到mutable
#include<iostream> #include<string> class Entity { private: std::string m_Name; mutable int m_DebugNum = 0; public: const std::string &GetName() const { m_DebugNum++; return m_Name; } }; int main() { const Entity e; e.GetName(); std::cin.get(); }
因为我在int main()中创立的e是const类型,要是去掉类内GetName()方法后面的const,那么主函数中的e.GetName()将会出错,因为e是常量,而e的这个方法却无法保证不改变成员变量,要是不去掉,则const函数无法改变成员变量,此时就需要用到mutable关键字
另一个mutable的用法是lamda表达式,是c++11的新特性