天天看點

#define與const差別總結

一:C++中不但可以用define定義常量還可以用const定義常量,它們的差別如下:

eg:

#define MAX 255;

const float MAX = 255;

(1)作用階段:

#define-在編譯的預處理階段,編譯器把所定義的常量名字和常量值聯系起來,進行替換;

const-在編譯時确定其值,在編譯、運作的時候起作用。

(2)作用方式:

#define-定義的常量沒有資料類型,所給出的是一個立即數,隻是簡單的字元串替換,不進行類型安全檢查,可能會産生意想不到的錯誤;

const-定義的常量有資料類型,編譯時會進行類型檢查,可以避免一些低級的錯誤。

(3)存儲方式:

#define-不配置設定記憶體,給出的是立即數,預處理後占用代碼段空間,有多少次使用就進行多少次替換,在記憶體中會有多個拷貝,消耗記憶體大;

const-定義的隻讀變量在靜态存儲區中配置設定空間,在程式運作過程中記憶體中隻有一個拷貝。

(4)運作方式:

#define-宏替換隻作替換,不做計算,不做表達式求解;

const-在編譯時, 編譯器通常不為const常量配置設定存儲空間,而是将它們儲存在符号表中,這使得它成為一個編譯期間的const常量,沒有了存儲與讀記憶體的操作,使得它的效率也很高。

(5)代碼調試的友善程度:

#define-是不能進行調試的,因為在預編譯階段就已經替換掉了;

const-const常量可以進行調試。

(6)作用範圍:

#define-宏定義的作用範圍僅限于目前檔案;

const-預設狀态下,const常量隻在檔案内有效,當多個檔案中出現了同名的const常量時,等同于在不同檔案中分别定義了獨立的常量。如果想在多個檔案之間共享const常量,必須在常量定義之前添加extern關鍵字(在聲明和定義時都要加)。

(7)指針變量指向:

#define-用define定義的常量是不可以用指針變量去指向的;

const-用const定義的常量是可以用指針去指向該常量的位址的。

(8)定義函數:

#define-用define可以定義一些簡單的函數;

const-const是不可以定義函數的。