###const常量#程序員
咱們經過const修飾變量來定義常量,const對象一旦建立完成就不容許修改,const對象必須初始化。指針
const int a = 100; //正確 a = 10; //錯誤,const對象不容許修改 const int b; //錯誤,const對象必須初始化
默認狀況下,const對象只在文件內有效,若是須要在其餘文件中使用該對象,則需在定義和聲明處均添加extern關鍵字,這點和變量不一樣。code
//file1.h文件定義了常量a; extern const int a=100; //file1.cpp文件聲明瞭常量a,與file1.h中的是同一個; #include "file1.h" extern const int a;
###const的引用#對象
把引用綁定到const對象上,稱爲對常量的引用。變量
const int a = 100; const int &b = a;
容許把對const的引用綁定到很是量上,但不容許經過對const的引用來修改很是量的值。file
int a = 100; const int &b = a; //正確,容許把對const的引用綁定到很是量上 b = 10; //錯誤,不容許經過對const的引用修改很是量的值
不容許把普通引用綁定到const對象上,由於試圖經過引用修改const對象。引用
const int a = 100; int &b = a; //錯誤,不容許把普通引用綁定到const對象上
嚴格上來說,不存在常量引用,由於引用自己不是一個對象,可是程序員經常將對const的引用稱爲常量引用。程序
###指向常量的指針和常量指針#文件
指向常量的指針:co
同引用同樣,指向常量的指針不容許修改所指對象的值,想要存放常量對象地址,只能使用指向常量的指針。
const int a = 100; int *b = &a; //錯誤,b是一個普通指針 const int *c = &a; //正確,c是一個指向常量的指針 *c = 10; //錯誤,不能經過c來修改常量a
同綁定const的引用同樣,指向常量的指針能夠指向很是量對象,指向常量僅表明不容許經過該指針修改對象的值,但沒有規定所指對象必須爲常量。
指向常量的指針還能夠更改所指對象,但不容許修改所指對象的值。
const int a = 100; int b = 10; const int *c = &a; c = &b; //正確,容許修改所指對象,容許指向很是量對象
常量指針:
指針是對象,因此容許把指針自己定義爲常量,常量指針不容許修改指針的值,可是容許經過指針修改所指對象的值。
int a = 100; int *const b = &a; *b = 10; //正確,容許經過常量指修改所指對象的值 int c = 10; b = &c; //錯誤,不容許修改指針自己的值
頂層const:
咱們用頂層const來表示對象自己是常量,底層const則與指針引用等複合類型的基本類型部分有關。
同其餘類型相比,指針類型既能夠是頂層const,也能夠是底層const。
int a = 100; int *const b = &a; //不能修改b的值,b是一個頂層const const int d = 10; const int *c = &d; c = &a; //能夠修改c的值,c是一個底層const