容易混淆的 const

        關鍵字 const並不能把變量變成常量!在一個符號前加上const限定符只表示這個符號不能被賦值。也就是它的值對這個符號來說是隻讀的,但它並不能防止通過程序的內部(甚至是外部)的方法來修改這個值const最有用之處就是用它來限定函數的形參, 這樣該函數將不會修改實參指針所指的數據,但其他的函數卻可能會修改它。這也許就是 c和 c++中const最一般的用法 。

        const可以用在數據上, 如:

                 const  int  limit =  10;

        這和其他語言差不多, 但當你在等式兩邊加上指針, 就有一定難度了:

                 const int*limitp= &limit;

                 int i= 27;

                 limitp= &i;

        這段代碼表示limitp 是一個指向常量整型的指針。 這個指針不能用於修改這個整型數,但是在任何時候, 這個指針本身的值卻可以改變。 這樣, 它就指向了不同的地址, 對它進行解除引用 ( dereference)操作時會得到一個不同的值!

        const和*的組合通常只用於在數組形式的參數中模擬傳值調用 。 它聲稱 “我給你一個指向它的指針,但你不能修改它。”這個約定類似於極爲常見的 void*的用法,儘管在理論上它可以用於任何情形, 但通常被限制於把指針從一種類型轉換爲另一種類型 。

        類似地,你可以取一個 const變量的地址,並且可以…(''唔,我最好不要往大家的腦袋裏灌輸這種思想") 。正如 Ken Thompson所指出的那樣, const關鍵字可能引發一些罕見的錯誤,只會混清函數庫的接口 。回首往事, const關鍵字原先如果命名爲 readonly就好多了。


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