C 中的頂層const和底層const

2021-09-24 16:46:13 字數 1012 閱讀 6726

在c++中,頂層const可以表示任意的物件是常量,而底層const則是與指標,引用這樣的復合符合型別相聯絡。確切地說,在指標中,既有底層const之說,也有頂層const的說法。但在引用中就只有底層const,原因是頂層const表示任意的物件是常量,而引用不是物件。而在其他的型別**現的const一般都是頂層const

int val = 3;

const int val1 = 5; //頂層const

const int *p1 = &val; //底層const;

int *const p2 = &val; //頂層const

const int *const p3 = &val; //左邊的const是底層const,右邊的const是頂層const

const int &ref = val; //底層const

物件是底層const還是頂層const的區別就是在物件的拷貝上,對於乙個頂層const物件的拷貝是沒有印象的,其中的乙個原因就是非常量可以轉化為常量。

val = val1; //可以
而如果要拷貝的物件是底層const的話,那麼就必須要滿足一定的條件,如果是有關引用的賦值的話,我們就只需要看它是否滿足引用的賦值規則,否則,拷入的物件和拷出的物件必須都要具有底層const。

有關引用的賦值規則,之前有寫過。有關引用的賦值規則

bconp1 = p3; //可以,兩者都具有底層const
在指標中,我們可以這樣去判斷:如果允許我們修改指標的值,那麼這個const是乙個底層const,否則,是乙個頂層const。換句話說,底層const修飾的指標是常(量)指標,而頂層const修飾的指標是指標常量。

常(量)指標:即雖然指標所指的物件本身可能不是常量,但我們不可以通過指標來修改這個物件,但我們可以用別的物件的位址再來初始化這個指標。

指標常量:只能被乙個物件的位址初始化。

C 中頂層const和底層const

指標本身是乙個物件,由於,指標實際相應著記憶體單元的一段儲存空間,然而,指標所指向的也是乙個資料物件,因此,指標是乙個常量與指標所指向的是乙個常量是兩個全然不同的概念,頂層 const 表示的是 指標本身是乙個常量,底層 const 表示的是 指標所指的物件是乙個常量,更普通情況下,頂層 const...

C 中頂層const和底層const

頂層const表示指標本身是個常量,底層const表示指標所指的物件是乙個常量。int i 0 int const p1 i 不能改變p的值,p是乙個指標,所以p是乙個頂層const const int p2 i 表示不能改變指標所指i的值,所以是乙個底層const const的頂層和底層不只是限定...

C 頂層const和底層const

當我們定義指標和變數的時候,有時候希望定義成const型,就是不希望程式中改變自己定義的變數,一旦有 試圖改變定義好的const型的變數,在編譯的時候就會直接報錯。指標本身也是乙個變數物件,指標所指的變數也是乙個變數物件。當定義const int p i的時候是指標不可變還是變數i不可變呢?這就涉及...