C++基礎知識學習-const

** 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;//指向整數的常量指針
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容