1. 程式人生 > >#define與const區別總結

#define與const區別總結

一:C++中不但可以用define定義常量還可以用const定義常量,它們的區別如下: #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是不可以定義函式的。