有时候,我们需要在const函数中修改一些变量,比如类的共享标记、共享计数器,如下代码: class Entity { private: int referenceCounter; public: void ref() { referenceCounter++; } ... }; 我们可能会在很多函数中调用Entity::ref()来对这个类增加引用,因为这个函数是如此基础,导致可能有一些被const修饰的函数也可能调用这个方法,那么,我们往往需要将ref()也加上const修饰以方便调用。如下: public: void ref() const { ... } 这时我们就会面临一个情况,如何在这个const的函数中修改值? 一种众所周知的方法是: (Entity *this)->referenceCounter++; 另外,还有一个比较罕见的用法,那就是修改referenceCounter的定义,通过mutable进行修饰: class Entity { private: mutable int referenceCounter; public: void ref() const { referenceCounter++; } ... }; mutable的含义在这里表示这个变量可以在const中被修改,它overwrite了const修饰。
不可否认,这是C++一个继const之后的又一恶心发明,用一个恶心解决另一个恶心。 mutable修饰的变量,不仅可以在const函数中修改,也可以在无视const类的约速,如下代码是可以运行的: const Entity e; e.reference = 1;
如何修改const类中的变量(或在const函数中修改变量)
最新推荐文章于 2023-03-23 15:29:42 发布