c++的const(2)

  const用來定義不可變數據成員
  

  一個函數如果被定義爲const,其實const修飾的是該函數裏的this指針,不允許修改this指針所指向的值,而this指針本來就是不允許修改的(不會有人this = ** 這樣吧)。
  而mutable用來定義可變數據成員
  const成員函數可以改變mutable成員,這樣的好處是保護那些想保護的涉及類狀態的數據成員,而使一些與類狀態關係不大的數據成員可以被改變,比如統計訪問次數的成員。

  const的修飾關係也比較糾結,const是修飾其後的第一個關鍵字,,那麼有如下幾種情況:

int b = 1;
const int* p = &b; //[1]
int const *p = &b; //[2]
int* const p = &b; //[3]
const int* const p = &b; //[4]

  對於[1]情況和[2]情況其實是一樣的,const是用來修飾int*的,是指p這個指針所指向的變量是const的,不可以被改變,諸如*p = 2;這樣的賦值是不允許的。可以理解爲,*代表p是一個指針,而不管是const int 還是int const,都表示的是p這個指針指向的數據類型,所以p是一個指向常整數的指針。

  而對於[3],const是用來修飾p的,是指p不可以被修改,諸如p++這樣的是不允許的。因爲const已經在*之後,就表示const是修飾p的,說明p是const的,然後*表示p是指針,int表示p指向的數據類型。

  [4]就簡單了,無論是p還是p所指向的變量都是不可以被修改的.


  所以上面所說的const如果修飾函數,由於本身this指針已經是T* const this,即this不可被修改,而const再修飾函數,則this指針變爲const T* const this,即this指針所指向的內容也不可以被修改.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章