1. const是一種型別修飾符,用於說明永不改變的物件,const物件一旦定義就無法再改變,所以const物件必須初始化。
2.頂層const與底層const區別
位於*左側為底層const,位於*右側為頂層const
頂層const意味著記憶體本身儲存的資料是常量,
如int const a = 3;
即變數a是常量,不可改變。a = 5;//error
如int const *pa = &a;
即pa所指向記憶體a中資料為常量,不可改變
*pa = 5; // error
但是可以改變指標的指向
int b = 5; pa = &b; // ok
底層const意味著指標指向的記憶體中儲存的資料為常量,不可改變,
如 int a = 3;
int *const pa = &a;
即記憶體a中儲存資料為常量,不可改變
int b = 5; pa = &b; // error
但是可以改變指標指向記憶體中資料
*pa = 5; // ok
注:底層const使用的前提是存在指標,針對的指標所指向記憶體的資料。
3.盡可能使用const,enum,inline替換#define
巨集:未經過c++的型別檢測機制,是存在安全隱患的。
如果打算使用#define pi 3.14 ,請使用double const pi = 3.14
如果打算使用#define red rgb(0xff,0x00,0x00)
#definegreen rgb(0x00,0xff,0x00)
#defineblue rgb(0x00,0x00,0xff)
請使用enum color
red = rgb(0xff,0x00,0x00),
green = rgb(0x00,0xff,0x00),
blue = rgb(0x00,0x00,0xff)
如果打算使用#define squr(a) a*a
請使用 double sque(doubleconst a) const
如果打算書寫函式
double sque(double const a) const
與double sque(double const a)
請停止,完全可以使用乙個函式double sque(double const a)const
完成兩個函式的功能,達到減少**冗餘的目的。
兩個函式可以構成過載函式的關係,const物件只能呼叫const函式,非const函式同樣可以呼叫const函式。
const具有安全性檢測與資料保護功能,請盡量使用const關鍵字修飾變數,物件,引用,指標,函式。
5.防止const返回可以改變物件的行為
如下**
struct cpoint
inta;
intb;
class rectangle
public:
cpoint& get() const
private:
cpointpoint;
通過返回cpoint& 完全可以改變內部物件的狀態。即返回內部物件的引用即相當於公開的內部物件,效果同public,破壞的封裝。同const函式的作用完全違背。請避免變樣使用。請使用下面的方法:
cpoint get() const
const cpoint& get() const
6.mutable與valatile的使用
說了const就不得不提mutable與volatile。
const物件的值不能被改變,但是mutable成員的值卻可以被修改
struct cpoint
inta;
mutableint b;
void change_point(cpoint const point) const
++point.a; // error
++point.b; // ok
**中編譯器經常對記憶體進行優化,volatile表示變數是易變的,表示可以被某些編譯器未知的因素更改。尤其高併發時期。此時可使用volatile int a; 告訴優化器不要優化這個變數,請時時從記憶體中讀取。
const關鍵字總結
這裡會呼叫string類的預設建構函式初始化陣列元素。const int cur 這裡的cur是乙個指向int型別的const物件的指標,const先頂了cur指向的物件的型別,而並非cur本身,所以cur不是const的 const double cur const double pur 1.2 ...
const關鍵字總結
被const修飾的變數是不能改變的 const修飾變數時,必須在宣告變數的同時給出初始化 類中的const成員變數不一樣 定義為變數本身是乙個常量,因此對一切的內建型別常量而言,所有的const都是頂層const 對指標來說,常量指標是頂層const,對於引用則沒有頂層const的概念。只在指標和引...
const關鍵字總結
const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。使用const在一定程度上可以提高程式的健壯性,另外,在 別人 的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下面幾個問題...