如何修改const类中的变量(或在const函数中修改变量)

 有时候,我们需要在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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值