c++ 宏和const的區別


(1) 編譯器處理方式不同

  define宏是在預處理階段展開。

  const常量是編譯運行階段使用。

(2) 類型和安全檢查不同

  define宏沒有類型,不做任何類型檢查,僅僅是展開。

  const常量有具體的類型,在編譯階段會執行類型檢查。

(3) 存儲方式不同

  define宏僅僅是展開,有多少地方使用,就展開多少次,不會分配內存。

  const常量會在內存中分配(可以是堆中也可以是棧中)。

(4)const  可以節省空間,避免不必要的內存分配

例如:  
        #define PI 3.14159 //常量宏  
        const doulbe Pi=3.14159; //此時並未將Pi放入ROM中 ......  
        double i=Pi; //此時為Pi分配內存,以后不再分配!  
        double I=PI; //編譯期間進行宏替換,分配內存  
        double j=Pi; //沒有內存分配  
        double J=PI; //再進行宏替換,又一次分配內存!  
        const定義常量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而 #define定義的常量在內存中有若干個拷貝。 
(5) 提高了效率

編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM