const在限制函数修改内部变量的一点作用,以及mutable关键字

在大本营看到很多朋友都在自己的日志中记录了const的一些作用,但观所有记录日志,大多数都是言const做为指针修饰符的作用,要不然就是在于函数传参及返回值的修饰作用。可能大家还忽视了一点,const还有限制成员函数修改成员变量的作用,参见下列示例 

Code:
  1. class Test  
  2. {  
  3. public:  
  4.     Test(int a = 0)  
  5.     : m_a(a)  
  6.     {}  
  7.       
  8.     void add(int& a) const  
  9.     {  
  10.         m_a++;  
  11.   
  12.         a++;  
  13.     }  
  14. private:  
  15.    int m_a;      
  16. };  

你会发现,实际上上面的代码是编译不过的,因为add尝试去修改内部成员变量。这个对于函数传参,却没有任何影响。我在GCC4.4编译环境下,获得了下列编译错误:

error: increment of data-member 'Test::m_a' in read-only structure

可能有些朋友要问了,如果我只想用这种方法限制某一些成员变量不被修改,但有一些又需要修改怎么办呢?这时候你可以使用mutable关键字了,它解决了这个难题。

Code:
  1. class Test  
  2. {  
  3. public:  
  4.     Test(int a = 0)  
  5.     : m_a(a)  
  6.     {}  
  7.       
  8.     void add(int& a) const  
  9.     {  
  10.         m_a++;  
  11.   
  12.         a++;  
  13.     }  
  14. private:  
  15.    mutable int m_a;      
  16. };  

你再尝试编译上面程序,它将能正常编译

 

点这加我为好友

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值