const 與 #define的區別

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

在c++程序中,它還可以修飾函數的定義體,定義類中某個成員函數爲恆態函數,即不改變類中的數據成員


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


2)有些集成化的調試工具可以對const常量進行調試,但是不能對宏常量進行調試。
在c++程序中只使用const常量而不使用宏常量

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章