#define 和 const 定義常量比較。

原文地址:http://blog.csdn.net/y1196645376/article/details/59644700

感謝學長解惑.

在C++中可以使用#define或者const來定義常量,但是使用const相比起#define有更多的優點。——–<Effective C++>

以下部分內容選自<程序猿面試寶典>

  • const 常量有數據類型,而宏常量是沒有數據類型。編譯器可以對前者進行類型安全檢查,而後者僅僅進行字符替換,沒有類型安全檢查,並且在字符替換過程中會產生一些意料不到的錯誤。(邊際效應)
#define X 10
#define Y X+X

-》Y*Y   //原意:20*20  實際上是 10+10*10+10
  • 1
  • 2
  • 3
  • 4

當然,這樣的邊際效應可以通過良好的編寫宏習慣避免。

  • 有些集成化調試工具可以對const常量進行調試,但是不能對宏常量進行調試。在C++程序中一般只使用const常量而不是用#define。

既然const常量可以取代#define常量那麼爲什麼有的庫(程序)使用的#define常量

常量的引進是在早期的C++版本中,當時標準C規範正在制訂。那時,常量被看做一個好的思想而被包含在C中。但是,C中的const的意思是”一個不能被改變的普通變量”。在C中,它總是佔用內存,而且它的名字是全局符。C編譯器不能把const看成一個編譯期間的常量。在C中,如果寫:

const bufsize=100char buf[bufsize]; 
  • 1
  • 2

儘管看起來好像做了一件合理的事,但這將得到一個錯誤的結果。因爲bufsize佔用內存的某個地方,所以C編譯器不知道它在編譯時的值。在C語言中可以選擇這樣書寫:

extern const bufsize;//declaration only 
  • 1

這種方法也可用在C語言中。在C語言中使用限定符const不是很有用,即使是在常數表達式裏(必須在編譯期間被求出)想使用一個已命名的值,使用const也不是很有用的。C迫使程序員在預處理器裏使用# define。

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