底層const是代表對象本身是一個常量(不可改變);
頂層const是代表指針的值是一個常量,而指針的值(即對象的地址)的內容可以改變(指向的不可改變);
1 #include <iostream> 2 3 int main() 4 { 5 int i=0; 6 int* const p1=&i; //-----不能改變p1的值,這是一個頂層const 7 const int b=i; //-----不能改變b的值,這是一個頂層const(一般變量前const都是頂層const) 8 const int* p2=&b; //-----可以改變p2的值,這是一個底層const(對象是個const,所以可以底層指向頂層) 9 const int*const p3=p2; //--靠右邊的是頂層const,靠左的事底層const; 10 const int& some=i; //--- 用於聲明引用的,都是底層const; 11 }
當執行對象的拷貝操作時,常量時頂層const還是底層const時就區別明顯,其中頂層const不受什么影響;
底層const執行拷貝是2對象的類型必須一樣,或者可轉換,一般非常量可以轉換成常量;