** const 對象被設定為僅在文件內有效.當一個程序需要使用多個文件的時候,如果多個文件出現同名的const變量時,其實等同于在不同的文件中分別定義了獨立的變量. **
** 如果想在多個文件中共享const對象,最好的做法是:對于const變量不管是聲明還是定義都添加extern關鍵字.
extern const i=1024;
const引用
const int c=1024;
const int &r1=c;//對常量的引用需要在聲明前加入const
int &r2=c;//錯誤,c是常量,而r2是一個非常量引用聲明.
const int &r3=1024;//允許聲明一個常量引用綁定一個字面值
與之對應的,如果綁定非常量引用
double i=3.14;
int &r=i;//錯誤,int類型引用不能綁定到double對象上
const和指針
pointer to const:** 指向常量的指針 **
const int i=1024;
int *p=&i;//錯誤,p是一個非常量指針
const int *p1=&i;//正確,p1是一個指向常量對象的指針
const指針
** 常量指針 ** const pointer 必須初始化
int i=1024;
int *const p=&i;//p指針所存放的地址不會改變
const int ii=2048;
const int *const p1=?//p1是指向常量對象的常量指針
頂層 const和底層 const
** 頂層const (top-level const) 表示指針本身是一個常量 **
** 底層const (low-level const) 標識指針所對應的對象是一個常量 **
constexpr變量
c++11新標準,允許將變量聲明為constexpr類型來由編譯器來驗證變量的值是否是一個常量表達式,用constexpr聲明的變量一定是一個常量,而且必須用常量表達式來初始化.
constexpr int i=1024;
constexpr int sz=size();//只有當將size函數聲明為constexpr函數時才成立.
要注意的是,constexpr 后跟的聲明類型必須為字面值(literal type)類型(如int,double,引用,指針),而復合類型(包含string,IO)則不屬于字面值類型.其中,一個constexpr指針的初始值必須定義為0或者nullptr.
const int *p=nullptr;//指向常量的指針(pointer to const)
constexpr int *p1=nullptr;//指向整數的常量指針