面試筆記 | const與#define相比的優點

1. 請說出const與#define相比有何優點?

區別

#define MAX 255

const float MAX = 255; 
(1)就起作用的階段而言:
  • #define是在編譯的預處理階段起作用。
  • const是在編譯、運行的時候起作用。
(2)就起作用的方式而言:
  • #define只是簡單的字符串替換,沒有類型檢查。
  • const有對應的數據類型,是要進行判斷的,可以避免一些低級的錯誤。
(3)就存儲方式而言:
  • #define只是進行展開,有多少地方使用,就替換多少次,它定義的宏常量在內存中有若干個備份;
  • const定義的只讀變量在程序運行過程中只有一份備份。
(4)從代碼調試的方便程度而言:
  • const常量可以進行調試的。
  • define是不能進行調試的,因爲在預編譯階段就已經替換掉了。

優點

主要從節省空間、提高效率、避免錯誤等方面入手回答此題。
  • const修飾的只讀變量具有特定的類型,而沒有數據類型。編譯器可以對前者進行類型安全檢查,而對後者只進行簡單的字符替換,沒有類型安全檢查,並且在字符替換中可能會產生意料不到的錯誤。
  • 有些集成化的調試工具可以對const常量進行調試,但是不能對宏常量進行調試。
  • 編譯器通常不爲普通const只讀變量分配存儲空間,而是將它們保存在符號表中,這使得它成爲一個編譯期間的值,沒有了存儲與讀內存的操作,使得它的效率也很高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章