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
只讀變量分配存儲空間,而是將它們保存在符號表中,這使得它成爲一個編譯期間的值,沒有了存儲與讀內存的操作,使得它的效率也很高。