關於const關鍵字,有幾個注意點。
首先是把引用繫結到const物件上,與普通引用不同,對常量的引用不能被用來修改它所繫結的物件。
const int ci=1024;
const int &r1=ci; //正確:引用及其對應的物件都是常量
r1=42; //錯誤:r1是對常量的引用,不可修改
int &r2=ci; //錯誤:ci是常量,需要常量引用
對於非常量物件、字面值、一般表示式,也允許用常量引用繫結,但此時不可通過修改常量引用來修改原非常量物件。
int i=42;
const int &r1=i; //正確:允許將const int&繫結到非const物件上
const int &r2=42; //正確:42是字面值,r2是常量引用
const int &r3=r1*2; //正確:r1*2是一般表示式,r3是常量引用
int &r4=r1*2; //錯誤:r1*2是一般表示式,r4是非常量引用
r1=1; //錯誤:r1是常量引用,不可修改r1
i=1; //正確:i不是常量
也就是說,常量引用只是對引用可參與的操作做出了限定,而對於引用的物件本身是否是const未作限定。
關於指標和const,可以分為指向常量的指標和常量指標。
對於指向常量的指標,可以模擬常量引用,不能通過該指標修改所指物件的值,對於所指物件是否是常量也未作限定。
const int i=42;
int *p1=&i; //錯誤:i是常量,p1是普通指標
const int *pi=&i; //正確:i是常量,pi是指向常量的指標
*pi=1; //錯誤:不能給*pi賦值
int j=42;
const *pj=&j; //正確:j不是常量,pj是指向常量的指標
*pj=1; //錯誤:不能通過給*pj賦值來修改j的值
j=1; //正確:j不是常量
對於常量指標,在定義時必須初始化,以後不可修改常量指標的值,即不能將該指標指向其他物件。
int i=0,j=0;
int *const pi=&i; //正確:pi是常量指標
*pi=1; //正確:可以給*pi賦值來修改i的值
pi=&j; //錯誤:pi是常量指標,不能給pi賦值
double pi=3.14,x=0.0;
const double *const pip=π //正確:pip是指向常量的常量指標
*pip=1.1; //錯誤:不能給*pip賦值來修改pi的值
pip=&x; //錯誤:不能給pip賦值來將pip指向x
其實,指向常量的常量指標和常量引用才是最為相似的。對於常量引用來講,我們不能通過給引用賦值來修改所繫結的物件,而引用本身在定義時就必須初始化,之後便不能修改引用(不能將引用繫結到其他物件上)。這兩個性質與指向常量的常量指標極為相似,就如上文const double *const pip=π
我們不能通過pip來修改pi的值(給*pip賦值),也不能將pip指向其他物件(給pip賦值)。深入學習的話,是因為c++的引用本身就是由指標來實現的,只不過對外隱藏了自身的值。
介紹完上面的內容,對於頂層const、底層const也就很好理解了。因為指標本身是否是常量和指標所指的物件是否是常量是兩個相互獨立的問題,所以c++用頂層const表示指標本身是常量,而用底層const表示指標所指的物件是常量。更一般的是,頂層const可以表示任意物件是常量。
int i=1;
int *const p1=&i; //p1是頂層const
const int ci=1; //ci是頂層const
const int *p2=&ci; //p2是底層const
const除了修飾一般變數,還可以修飾類中的成員,可以分為常成員函式和常資料成員。
使用const修飾的函式為常成員函式,宣告的格式為:
型別說明符 函式名(參數列) const;
常成員函式有以下特點:
常成員函式不能更新目的物件的資料成員。當類的資料成員是常量時,建構函式對該資料成員進行初始化,就只能通過初始化列表。如果乙個類的物件是常物件,那麼通過該常物件只能呼叫它的常成員函式,不能呼叫其他成員函式。
const可以用於對過載函式的區分。
void print(); void print() const;
非const的物件呼叫該函式,兩個過載的函式都可以匹配,但編譯器會選擇不帶const的函式。
C中const關鍵字
const 用法 定義常量,修飾指標 函式的輸入引數和返回值,把定義或者修飾的變數屬性設為唯讀。本質上它只是在全域性資料段或者棧中定義的是乙個唯讀的常量,不是真正位於字串常量區。所以關鍵字const 並不能把變數變成真正的常量,事實上還是可以改變 const 定義的變數的值。const 的目的是為了...
C 中const關鍵字
一 const修飾指標變數 int num 0 1.const在 前面,表示const修飾指標指向的內容 const int p intconst p 2.const在 後面,表示const修飾指標變數 int const p 二 const修飾成員函式首先來看一下普通成員函式 class a fu...
C 中」const「關鍵字
關於c 中的const關鍵字的用法非常靈活,而使用const將大大改善程式的健壯性,現將本人的一些體會總結如下,期望對大家有所幫助 一 丶const基礎 如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況 int b 500 const int a b 1 int const a...