可改不可改?
常量運算式是指在編譯器編譯時期就可以的到值的運算式,例如:const int a = 3,雖然聽起來很簡單,但實際上很容易犯錯,本文簡要總結它們的不同:
關于const:頂層const和底層const
一般,我們宣告const用來存盤不變的恒定量:
const int MAXN = int_max;
用指標指向:
const int *pMAXN = &MAXN;
這條陳述句開始的const int實際上是為了MAXN的型別做出的匹配,我們得到的pMAXN實際上是可修改的,
那么如何讓 pMAXN 不可修改呢?
c++采用’雙const‘的方法:
const int * const pMAXN = &MAXN;
這樣,pMAXN成為了不可修改值的,指向MAXN的指標,
其中,可以修改值的const就被稱為底層const,而不可修改值的稱為頂層const,
const int *pMAXN = &MAXN; //底層const
const int * const pMAXN = &MAXN; //左邊底層const,右邊頂層const
typedef的誤區
很顯然,當我們使用typedef的時候,const又產生了問題:
typedef char *pstring;
const pstring *ps;
在有上面的陳述句的基礎上,這條陳述句是什么意思?
const pstring cstr = 0;
一般情況下,我們看到pstring就會直接去找它的定義,這種習慣是錯誤的!我們應該按照次序,先讀這條陳述句,
首先,pstring加上了const修飾符,這代表定義的陳述句是const狀態,是常量運算式,其次,pstring定義的是指向char型別的指標,所以,綜上所述,這條陳述句宣告了一個指向char的常量指標即,指標的值不可修改,
那這一條陳述句呢:
const char *cstr = 0;
它宣告了一個指向const char型別的指標,指標的值可以修改,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465938.html
標籤:C++
上一篇:分段SVG輪廓圓
