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

const 與 #define的區別

在c程式中,const的用法主要有定義常量、修飾函式引數、修飾函式返回值等3個用處;

在c++程式中,它還可以修飾函式的定義體,定義類中某個成員函式為恆態函式,即不改變類中的資料成員

1)const 有資料型別,而巨集沒有資料型別,編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,
沒有型別安全檢查,並且在字元替換中可能會產生意料不到的錯誤(邊際效應)

2)有些整合化的除錯工具可以對const常量進行除錯,但是不能對巨集常量進行除錯。
在c++程式中只使用const常量而不使用巨集常量

“儘量用編譯器而不用預處理”,因為#define經常被認為好象不是語言本身的一部分
#define  TEMP  20 
編譯器會永遠也看不到 TEMP 這個符號名,因為在原始碼進入編譯器之前,它會被預處理程式去掉,於是 TEMP 不會加入到符號列表中。

3)const與#define最大的差別在於:前者在堆疊分配了空間,而後者只是把具體數值直接傳遞到目標變數罷了
const常量存在於程式的資料段,#define常量存在於程式的程式碼段。