const做用

const有如下幾個做用:數組

1. 定義const常量,具備不可變性。eg. const int MAX = 100;  int Array[MAX];函數

2. 進行類型檢查,使編譯器對處理內容有更多的瞭解,消除隱患。eg. void f(const int i){....}編譯器就會知道i是一個常量,不容許修改。spa

3. 避免模糊意義的數字出現,一樣何以很方便的進行參數的調整和修改。同宏定義同樣,能夠作到不變則已,一變都變。指針

4. 保護被修飾的東西,防止被意外修改,加強了程序的健壯性。code

5.爲函數重載提供參考對象

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

6. 節省空間,避免沒必要要的內存分配blog

#define PI 3.14159   //該宏用來定義常量
const double Pi=3.14159;  //此時並未將Pi放入只讀存儲器中
double i=Pi;   //此時爲Pi分配內存,之後再也不分配
double I=PI;//編譯期間進行宏替換,分配內存
double j=Pi;  //沒有內存分配
double J=PI; //再次進行宏替換,又一次分配內存

const定義常量從彙編的角度來看,只是給出了對應的內存地址,而不是像#define同樣給出當即數,因此const定義的常量在程序運行過程當中只有一份複製品,而#define定義的常量在內存中有若干個複製品。
7. 提升了程序的效率。編譯器一般不爲普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成爲一個編譯期間的常量,沒有了存儲與內存的操做,使得它的效率特很高。內存

 

引伸1:什麼狀況下須要使用const關鍵字編譯器

1. 修飾通常常量。eg.int const x=2 或 const int x=2。編譯

2. 修飾常數組。eg. int const a[8] = {1,2,3,4,5,6,7,8};  const int a[8]={1,2,3,4,5,6,7,8};

3. 修飾常對象。常對象是指對象常量。eg. class A; const A a; A const a;

  定義常對象時,一樣要進行初始化,而且該對象不能再被更新,修飾符const能夠放在類名後面,也能夠放在類名前面。

4. 修飾常指針

const int *A; //const 修飾指向的對象,A可變,A指向的對象不可變 int const *A; //const 修飾指向的對象,A可變,A指向的對象不可變 int *const A; //const 修飾指針A,A不可變,A指向的對象不可變 const int *const A; //指針A和A指向的對象都不可變

5. 修飾常引用。

相關文章
相關標籤/搜索