C++的頂層底層const

頂層const表示指針本身是個常量,底層const表示指針所指的對象是常量。其比較繞的地方是頂層const和底層const之間的拷貝(賦值)關係

 1 void testConst2() {
 2 
 3     int i = 0;
 4     int* const p1 = &i;            //頂層const
 5     const int ci = 42;            //頂層const
 6     const int* p2 = &ci;        //底層const
 7     const int* const p3 = p2;    //底層const且也是頂層const
 8     const int& r = ci;            //底層const
 9 
10     int* p;
11     p = p1;                        //頂層const一般可進行拷貝操作
12     //p = p3;                    底層const在進行拷貝操作時會有限制,此處錯誤
13     //p = p2;                    非常量可以轉換成常量,但反之不行,此處錯誤
14     p2 = p3;                    //把p3當做底層const,纔可進行底層const給底層const的拷貝
15 
16 }

底層const不能拷貝給頂層const,因爲頂層const本身不能修改。

頂層const拷貝給底層const時,一般沒有問題

還有一種就是底層const拷貝給底層const,當然了頂層const不能拷貝給頂層const

在12行的代碼中,p3作爲頂層const拷貝給p沒有任何問題,但p指向的是非常量整型,那麼可以通過*p來修改p指針所指向地址中的內容,此時p指針的地址和p3指針的地址相同,p3也是底層const,不允許修改其指向地址中的內容,就會發生衝突,所以編譯器會直接報錯

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