再探C++Primer (5)const限定符

###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
相關文章
相關標籤/搜索