不記得誰說過,能用const的時候盡量用const。確實,const為增加程序的健壯性做出了很大貢獻,但是const修飾指針的時候還是值得注意的。
一.指向const對象的指針;
如果指針指向const對象,那麼很顯然不能通過指針改變其所指向的const值。為了保證這個特性,C++語言強制要求指向const對象的指針也必須要具有const特性。
const double = 1.0;
const double *cpt;
cpt=&d; www.2cto.com
const類型的指針變量為什麼可以重新賦值?其實這裡的cpt是一個指向double類型const對象的指針,const限定的是cpt指針所指向的對象類型,而並非cpt本身。也就是說,cpt本身並不是const。所以cpt在定義的時候不需要一定初始化,允許給cpt重新賦值,指向另一個const對象。
需要注意:可以把一個普通對象的地址賦給指向一const對象的指針,但不可以把一個const對象地址賦給一個普通類型指針,否則會出現編譯錯誤。不能使用指向const對象的指針修改基礎對象。無論const指針指向的對象是不是const類型,系統都會把它所指的所有對象都視為const,僅限於該指針的const對象(通過該指針不能修改其值);
二.const指針;
除指向const對象的指針外,C++語言還是提供了const指針——本身的值不能修改。
int iNum = 1;
int * const icpt=&iNum;
這裡的icpt是const類型——不能再指向其他的對象。任何企圖給const指針賦值的行為都回導致編譯錯誤。這裡值得注意的是指針本身的const類型並沒有說明是否能用該指針修改它所指向對象的值。指針所指對象的值能否修改完全取決於該對象的類型。
int iNum = 5;
int * const icpt=&iNum;
*icpt=4;//這裡完全可以,因為iNum是普通變量
三.指向const對象const指針;
這裡要說明的就是上兩種情況的結合出現,即const類型的指針指向了const類型的對象。
const double pi=3.14;
const double * const pt=π
今天先總結這麼多了,歡迎大家留言交流學習。