1.效果-《高質(zhì)量C++/C編程指南》 C++ 語言可以用const 來定義常量,也可以用#define 來定義常量。但是前者比后者有更多的優(yōu)點: 2.實現(xiàn)機(jī)制 宏是預(yù)處理命令,即在預(yù)編譯階段進(jìn)行字節(jié)替換。const常量是變量,在執(zhí)行時const定義的只讀變量在程序運行過程中只有一份拷貝(因為它是全局的只讀變量,存放在靜態(tài)存儲區(qū)的只讀數(shù)據(jù)區(qū)。根據(jù)c/c++語法,當(dāng)你聲明該量為常量,即告訴程序和編譯器,你不希望此量被修改。 程序的實現(xiàn),為了保護(hù)常量,特將常量都放在受保護(hù)的靜態(tài)存儲區(qū)內(nèi)。凡是試圖修改這個區(qū)域內(nèi)的值,都將被視為非法,并報錯。 這不能理解為凡是字符串都是放在靜態(tài)存儲區(qū)域的。這個跟數(shù)據(jù)類型沒有關(guān)系,而是這個量是變量還是常量的問題。例如,一個字符串變量就是可以被修改的。 這種靜態(tài)存儲區(qū)域的保護(hù)機(jī)制是由編譯器實現(xiàn)的,而非存儲該值的內(nèi)存的電器屬性。換言之,實質(zhì)上內(nèi)存永遠(yuǎn)都可以被用戶隨意修改,只是編譯器給用戶的代碼注入了一些自己的保護(hù)代碼,通過軟件手段將這段內(nèi)存軟保護(hù)起來。這種保護(hù)在匯編級別可以輕松突破,其保護(hù)也就無效了。)。 3.用法區(qū)別 define宏定義和const常變量區(qū)別:
|
|
來自: 小力·大力 > 《C相關(guān)》