C++ define與const

來源:互聯網
上載者:User

標籤:++   出現   多個   c++   聯絡   沒有   地址   處理   地區   

C++中不但可以用define定義常量還可以用const定義常量,它們的區別如下:

  • #define MAX 255定義的常量是沒有類型的,所給出的是一個立即數,編譯器只是把所定義的常量值與所定義的常量的名字聯絡起來,define所定義的宏變數在預先處理的時候進行替換,在程式中使用到該常量的地方都要進行拷貝替換;

    const float MAX = 255; 定義的常量有類型名字,存放在記憶體的靜態地區中,在程式運行過程中const變數只有一個拷貝,而#define 所定義的宏變數卻有多個拷貝,所以宏定義在程式運行過程中所消耗的記憶體要比const變數的大得多;

  • 用define定義的常量是不可以用指標變數去指向的,用const定義的常量是可以用指標去指向該常量的地址的;

  • 用define可以定義一些簡單的函數,const是不可以定義函數的.

具體來說,有以下幾方面的區別:

1.編譯器處理方式 
define – 在預先處理階段進行替換 
const – 在編譯時間確定其值

2.類型檢查 
define – 無類型,不進行型別安全檢查,可能會產生意想不到的錯誤 
const – 有資料類型,編譯時間會進行類型檢查

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

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

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

C++ define與const

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.