2010-11-15 243 views
5

如果之前詢問過,我表示歉意。我的搜索結果沒有提出類似的問題。訪問靜態變量的Const方法

這是一個概念性問題。據MSDN和其他人也:

常量成員函數不能修改任何數據成員或調用不恆定的任何成員函數

我們爲什麼然後被允許訪問的靜態成員變量一個const方法?

+0

如果你只是讀取成員變量,那麼你沒有改變它們,不違反const要求嗎? – Jay 2010-11-15 19:01:52

+0

@Jay我可以改變它,不只是讀它 – Samaursa 2010-11-15 19:48:11

回答

9

C++標準說,這大約const成員函數:

如果該成員函數被聲明const,這種類型是const X*,[...]

const成員函數,通過const訪問路徑訪問調用該函數的對象;因此,const成員函數不得修改該對象及其非靜態數據成員。

所以你看到只有非靜態數據成員是成員函數的'常量'的一部分。

但是,我認爲,更重要的是它表明一個很好的方式,以瞭解發生了什麼事情與const成員函數是,它使得隱含this指針的指針const

由於靜態成員不需要通過this指針訪問(隱式或顯式),因此對它們的訪問不是const限定的。

+1

非常感謝您的回覆。經過一番思考,我決定檢查你的答案是正確的,因爲它更詳細地解釋了,沒有任何疑問,尤其是部分:_「..瞭解正在發生什麼的好方法...」 – Samaursa 2010-11-23 00:05:55

13

因爲它們不是對象的一部分。

+1

簡單,但太重要了! – thecoshman 2010-11-15 19:03:47