在學習C++的過程中會遇到一個頭大的問題,就是關於const int *a, int const *a,int * const a和const int * const a的徹底理解與辨析,下面分享下經驗
工具/原料
VS2012+win7
方法/步驟
const int *a這裡const 修飾的是int,而int定義的是一個整值,因此*a 所指向的物件值不能通過 *a 來修改,但是可以重新給 a 來賦值,使其指向不同的物件。
int *const a 這裡const修飾的是 a ,a代表的是一個指標地址,因此不能賦給a其他的地址值,但可以修改a指向的值,這有點和cont int *a相反。
int const *a 和 const int *a 的意義是相同的 他們兩個的作用等價。
const int * const a 這個代表a所指向的物件的值以及它的地址本身都不能被改變。
總結一下:const 是一個左結合的型別修飾符,它與其左側的型別修飾符和為一個型別修飾符,所以,int const *a 和 const int *a 意義相同,int const *a限定的是*a,不是a(也即a可變,*a不可變),同理,int *const a限定的是a,不是*a(也即a不可變,*a可變),清楚了吧!
C++ 你成功的不二選擇