C++ 頂層const與底層const

1.頂層const:指代指針是一個常量
2.底層const:指代指針指向的對象是一個常量。

int i = 0;
int *const p1 = &i;//不能改變p1的值,這是一個頂層const,符合第一點
const int ci = 42;//不能改變ci的值,這是一個頂層const,符合第二點
const int *p2 = &ci;//允許改變p2的值,這是一個底層const,符合第二點
const int *const p3 = p2;//靠右的const是頂層const,符合第一點;靠左的是底層const,符合第二點
const int &r = ci;//用於聲明引用的const都是底層const


//頂層const與底層const作用主要是拷貝方面,頂層const和底層const進行拷貝操作時有所不同。總的來說,頂層const常量一般不受影響,而底層const必須是拷入和拷出的對象必須具有相同的底層const,或者能夠進行數據轉換,常常是非常量可以轉換成常量
i = ci;//正確:拷貝ci的值,ci是一個頂層const,對此操作無影響
p2 = p3;//正確:p2和p3指向的對象類型相同,p3頂層const的部分不影響
int *p = p3;//錯誤:p3包含底層const的定義,而p沒有
p2 = p3;//正確:p2和p3都是底層const
p2 = &i;//正確:int*能轉換成const int*
int &r = ci;//錯誤:普通的int&不能綁定到int常量上
const int &r2 = i;//正確:const int&可以綁定到一個普通int上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章