【C++】#define和const的區別


‘#define 和const的區別具有以下幾個區別’

1.編譯器處理方式

define宏是在預處理階段展開。
const常量是編譯運行階段使用。

2.類型檢查

define宏沒有類型,不做任何類型檢查,僅僅是展開。
const常量有具體的類型,在編譯階段會執行類型檢查。

3.內存空間

define – 不分配內存,給出的是立即數,有多少次使用就進行多少次替換,在內存中會有多個拷貝,消耗內存大
const – 在靜態存儲區中分配空間,在程序運行過程中內存中只有一個拷貝

4.其他

在編譯時, 編譯器通常不為const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。
宏替換只作替換,不做計算,不做表達式求解。

5作用域:默認都是在當前文件

宏定義的作用范圍僅限於當前文件。
默認狀態下,const對象只在文件內有效,當多個文件中出現了同名的const變量時,等同於在不同文件中分別定義了獨立的變量。
如果想在多個文件之間共享const對象,必須在變量定義之前添加extern關鍵字(在聲明和定義時都要加)。

規則
在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。

具體講解C/C++中的const意義:
(http://blog.csdn.net/wenqiang1208/article/details/69569074)


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com