【引用】const與define

來源:互聯網
上載者:User

常量:

用宏表示常數

假如我們要寫一個有關圓的種種計算的程式,那麼∏(3.14159)值會被瀕繁用到。我們顯然沒有理由去改∏的值,所以應該將它當成一個常量對待,那麼,我們是否就不得不一遍一遍地寫3.14159這一長串的數呢?這就用到了宏。宏不僅可以用來代替常數值,還可以用來代替運算式,甚至是程式碼片段。宏的文法為: 

#define 宏名稱 宏值 

比如要代替前面說到的∏值,應為:#define PAI 3.14159注意,宏定義不是C或C++嚴格意義上的語句,所以其行末不用加分號結束。宏名稱的取名規則和變數名一樣,所以我們這裡用PAI來表示∏,因為C、C++不能直接使用∏字元。有了上面的語句,我們在程式中凡是要用到3.14159的地方都可以使用PAI這個宏來取代。宏名稱經常使用全部大寫的字母。假設原來有一段代碼:double zc = 2 * 3.14159 * R; //求圓周長,其中R是代表半徑的變數double mj = 3.14159 * R * R; //求圓面積 

在定義了宏PAI以後,我們就可以這樣使用:

#define PAI 3.14159 

double = 2 * PAI * R; //求圓周長,其中R是代表半徑的變數

double = PAI * R * R; //求圓面積 

用宏來取代常數,好處是: 

1)讓代碼更簡潔明了

當然,這有賴於你為宏取一個適當的名字。一般來說,宏的名字更要注重有明確直觀的意義,有時寧可讓它長點。

2)方便代碼維護

就如前面說的3.14159。哪天你發現這個∏值精度不夠,想改為3.1415926,那麼你只修改一處宏,而不是修改代碼中的所有宏。

原來的宏:

#define PAI 3.14159

修改後的宏:

#define PAI 3.1415926 

對宏的處理,在編譯過程中稱為“預先處理”。也就是說在正式編譯前,編譯器必須先將代碼出現的宏,用其相應的宏值替換,這個過程有點你我在文文書處理軟體中的尋找替換。完成預先處理後,所有原來的“PAI”都成了立即數3.1415926。所以在代碼中使用宏表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的類型。這容易帶來一些問題,所以C++使用另一更穩妥的方法來代替宏的這一功能。

const 資料類型 常量名 = 常量值;  

相比變數定義的格式,常量定義必須以 const 開始,另外,常量必須在定義的同時,完成賦值。  

const float PAI = 3.1415926; (注意分號) 

const 的作用就是指明這個量(PAI)是常量,而非變數。

常量必須一開始就指定一個值,然後,在以後的代碼中,我們不允許改變PAI的值,比如: 

const float PAI = 3.14159;

double zc = 2 * PAI * R;

PAI = 3.1415926;        //錯誤!,PAI不能再修改。

double mj = PAI * R * R;   

如果一個常量是整型,可以省略指出資料類型,如:

 const k = 100;

相當於

const int k = 100;  

反過來說,如果不指定資料類型,則編譯器將它當成整型。比如:

const k = 1.234;

雖然你想讓k等於一個實型數,然而,最終k的值其實是1。因為編譯器把它當成整型常量。

我們建議在定義變數時,明確指出類型,不管它是整型或其它類型。  

const int i = 100;

const double di = 100.0;

const 與#define

#define定義的其實是一個常數的名字,就是說你可以把這個名字等價於常數使用,在編譯時間會被編譯器替換為該常數。之所以這麼做,僅僅是為了提高可讀性,但是安全性不能得到保證。  
  出於安全性的考慮,c++引入了const定義。當然這僅僅是const的功能之一。使用const,你可以定義一個不能修改其值的變數,也就是可以作為一個常量來使用了。當然,這個量與100,\'a\'等還是有區別的。區別就在於這個量有自己的記憶體位址,是被分配了空間的。  
  總的說來,#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.