關鍵字const的使用總結

2021-07-26 16:20:56 字數 2121 閱讀 4628

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語言中乙個比較微妙的地方,微妙在何處呢?請看下面幾個問題...