底層const是表明對象自己是一個常量(不可改變);ios
頂層const是表明指針的值是一個常量,而指針的值(即對象的地址)的內容能夠改變(指向的不可改變);spa
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對象的類型必須同樣,或者可轉換,通常很是量能夠轉換成常量;code