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. 修飾常引用。