C const的那些事

2021-07-15 22:08:26 字數 2293 閱讀 7757

const常量是編譯執行階段使用,const常量會在記憶體中分配。而define巨集常量是在預處理階段展開,有多少地方使用,就展開多少次,不會分配記憶體。const常量有資料型別,而define巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。並且const常量可以限定作用域,而define巨集常量都是全域性的。const既然有怎麼多的好處,而且c++也推薦使用const,我們何樂不為了!

# include

int main()

常量指標:const type *nametype const *name

# include

int main()

指標常量:type * const name

#include

int main()

常量引用,即指向常量的引用(乙個不能修改其指向物件的引用,並且也不能修改其自身的引用,可以接受const和非const型別資料)。

常量引用:const type &nametype const &name

# include

int main()

在函式傳參時使用引用/指標傳參時速度更快(無需進行拷貝),而使用const引用/指標既可以保證原始資料的安全性(將不能被修改),又有引用/指標傳參的速度。const型別引用/指標的形參可以使得函式傳參是可以處理const和非const型別的實參,若不使用const只能處理非const實參。const引用傳參時形參與實參不匹配,c++將生成型別正確臨時變數,並讓引數引用臨時變數(c++只有在const引用時才會這麼做)。

# include

int sum_1(int &val_1, int &val_2)

int sum_2(const

int &val_1, const

int &val_2)

int sum_3(const

double &val_1, const

double &val_2)

int main()

函式的返回值也可用const限定。當函式返回值為const引用/指標型別時,函式的返回值型別就必須要用const型別限定。

# include

const

int & max(const

int &val_1, const

int &val_2)

else

}int main()

在c++中const可以限定類的成員,但由於const型別必須進行初始化,所以在c++中,const型別的類成員必須在類構造之前進行初始化,即在初始化列表進行初始化。

# include

class c

//使用初始化列表進行初始化

~c() {}

const

int m_var;

};int main()

在c++中const可以限定類的成員函式,即承諾在本函式內部不會修改類內的資料成員,不會呼叫其它非const 成員函式(非const成員函式可以呼叫const成員函式)。在分檔案定義時需要在宣告檔案裡和定義檔案裡分別用const限定類成員函式(那麼多限定符,就它要宣告和定義都限定)。

在c++中const限定的物件,只能呼叫const成員函式。當成員函式過載時,非const限定的物件,優先呼叫非const限定的成員函式。

#ifndef c.h

#define c_h

class c

;#endif

#include "c.h"

#include

c::c()

c::~c()

void c::print()

void c::print()const

void c::swap()

# include

#include "c.h"

int main()

remap的那些事

月14日 今天還在看啟動 看到target.c這裡。先說說target.c的職責。target.c檔案包含和目標初始化相關的 如remap設定 系統時鐘設定和儲存器加速模組設定等,以及irq和fiq的異常處理空函式。好吧,這裡 看到了remap就好好查資料把它搞清楚咯!其實我前面看過這個了,只是人上...

AfxWinMain的那些事

afxwinmain函式原形如下 去掉了原來的很多沒用的注釋和累贅 cpp view plain copy print?int afxapi afxwinmain afxwininit函式 建立當前應用程式主線程 initinstance函式 內部通過create 函式來完成視窗的註冊,建立更新和顯...

void 的那些事

參考 void 是一種特殊的指標型別,可用於存放任意物件的位址。舉個例子 int p 0,pi p void pv p pv pd 但是一旦某個位址放到了void pv中,就不能利用 pv進行操作了 void 中存放的是未知物件的位址,所以無法操作該指標所指向的內容,但是可以對該指標進行操作,比如賦...