const 和指針

c++用了那麼久,以爲 const 和指針配合到一塊兒的時候就會有點點分不出來。c++

以下:spa

const Data* pData;

Data const * pData

Data * const pData

const Data * const pData      

Data const * const pData

  

是否是有點暈?指針

我其實用得最多的是 const Data* pData, 也理解該語句是定義 pData指向的對象是不容許修改的(不能經過pData指針調用非const方法)。code

那麼Data * const pData 實際就是指針自己是不可修改的(你不能將該指針賦值成另外一個地址)。對象

實際上只會出現3中狀況.blog

一種修飾語義是將指針所指向的對象修飾爲const.class

一種修飾予以是將指針自己(值類型)修飾爲const, 本質上像你定義一個 const long 同樣。方法

最後一種是對象爲const 同時指針也爲const.總結

那麼,上面那一串代碼均可以對號入座。di

簡單的辦法是:

const 關鍵字出如今 * 前面, 修飾的是對象

const 關鍵字出如今 * 後面, 修飾的是指針

好了,再分析以前的例子:

 

const Data* pData;               //修飾對象

Data const * pData               //修飾對象

Data * const pData               //修飾指針

const Data * const pData              //修飾對象 + 指針

Data const * const pData              //修飾對象 + 指針

 

因此有那麼多種寫法,其實就是在*左邊和右邊的問題。

咱們應該始終按本身的風格選擇一種固定模式就好。

 

爲何const 出如今 * 左邊是修飾對象而不是修飾指針

而爲何const 出如今 * 右邊是修飾指針而不是修飾對象

 

要理解這個,須要先理解神射手理論

說有一個神射手,隨意的在槍靶上,每隔1cm的地方打了一個眼。

這個槍靶上居住着一種二維生物。

通過不少該生物的宇宙年後,該生物中的科學家終於發明了太空飛船,開始探索本身的宇宙。

最後他們總結出他們的宇宙第必定律,就是每隔1cm的地方有個洞。

 

哈哈, 我忘記我是在哪看到這個段子的了,是3T仍是BigBang. 可是我在思考const 爲啥放左邊表示修飾對象的時候想起這個故事來着。

不要在乎這些細節,我真是一個很會自娛自樂的人。

相關文章
相關標籤/搜索