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