const與define的對比

來源:互聯網
上載者:User

define

常見用法:

1.定義簡單的常數:定義常量,便於修改(切不可在後面加上分號!)

#define N 1000

等效於

const int N = 1000;

但略有不同,define只是簡單替換,而不是作為一個變數來使用.

 

2. 定義簡單的函數:注意多使用括弧  define可以像函數那樣接受一些參數,如下:
#define max(x,y) (x)>(y)?(x):(y);

 

3.條件編譯(防止重複包括 重複定義)

4.定義單行宏,多行宏

 

與const比較部分

  • const常量有資料類型,而宏常量沒有資料類型。編譯器可以對前者進行型別安全檢查。而#define 只作簡單的字串替換,無型別安全檢查。
  • const在編譯時間分配儲存空間;而#define在先行編譯時編譯,不分配儲存空間。

 

關於const的詳解見先下表

 

援引自:http://blog.csdn.net/eric_jo/article/details/4138548

1

可以定義const常量

 

const int Max = 100; 

2

便於進行類型檢查

const常量有資料類型,而宏常量沒有資料類型。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤

void f(const int i) { .........}       //對傳入的參數進行類型檢查,不匹配進行提示

3

可以保護被修飾的東西

防止意外的修改,增強程式的健壯性。

void f(const int i) { i=10;//error! }       //如果在函數體內修改了i,編譯器就會報錯

4

可以很方便地進行參數的調整和修改

同宏定義一樣,可以做到不變則已,一變都變

 

5

為函數重載提供了一個參考

 

class A {            ......   void f(int i)       {......} //一個函數   void f(int i) const {......} //上一個函數的重載            ...... };

6

可以節省空間的,避免不必要的記憶體配置

const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式運行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干個拷貝

#define PI 3.14159         //常量宏 const doulbe  Pi=3.14159;  //此時並未將Pi放入ROM中               ...... double i=Pi;   //此時為Pi分配記憶體,以後不再分配! double I=PI;  //編譯期間進行宏替換,分配記憶體 double j=Pi;  //沒有記憶體配置 double J=PI;  //再進行宏替換,又一次分配記憶體!

7

 提高了效率

編譯器通常不為普通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.