指針和const

const int a = 0;
const int *pa = &a;        // 指向常量的指針,不能通過pa改變a的值

int b = 0;
const int *pb = &b;        // b不是常量,但是不能通過pb來修改b的值

int c = 0;
int * const pc = &c;       // 常量指針,pc是一個常量,不能改變pc的值

const int d = 0;
const int * const pd = &d; // 指向常量的常量指針,pd不能改變,也不能通過pd修改d的值

判斷方式可以採取從右往左看,也可以通過‘*’來區分,const在‘*’左邊修飾所指變量,在右邊修飾指針本身。

頂層const:指針本身是常量;

底層const:指針所指的對象常量。

常量表達式:值不會改變並且在編譯過程就能得到計算結果的表達式。

const int sz = get_size();    // 不是常量表達式,因爲結果在運行時獲得。

將變量聲明爲constexpr類型,由編譯器來驗證變量的值是否是一個常量表達式。聲明爲constexpr的變量一定是一個常量,而且必須用常量表達式初始化。此時不能使用普通函數作爲constexpr變量的初始值,但是允許定義一種特殊的constexpr函數,簡單地在編譯時就能計算出結果,此時可以用constexpr函數去初始化constexpr變量。

在constexpr聲明中定義一個指針,constexpr僅對指針有效,與指針所指對象無關。

int a = 1;
constexpr int *pa = &a;    // pa是一個指向整數的常量指針

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章