const在限制函數修改內部變數的一點作用,以及mutable關鍵字

來源:互聯網
上載者:User

在大本營看到很多朋友都在自己的日誌中記錄了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. };  

你再嘗試編譯上面程式,它將能正常編譯

 

點這加我為好友

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.