在c++中,當我們定義需要定義一種值不允許修改的變數時,就用到了const關鍵字,應用場景如表示緩衝區大小或者表示乙個常量。
const修飾的物件具有以下特點。
1. const修飾的常量不可修改;
const
int a=10;
//定義const常量
a=11
;//錯誤:不允許修改
2. const物件一旦建立必須初始化;
3. 對於const物件只能執行不改變其內容的操作;
const
int a=40;
const
int b=a;
//正確:用a去初始化不會改變其值。
4. const物件僅在檔案內有效,當多個檔案(cpp檔案)共享使用常量時,用到extern關鍵字;
對於const變數,在定義和宣告時都新增extern關鍵字(定義一次,多處可用)file.cpp定義並初始化乙個常量,該常量能被其他檔案訪問:
extern
const
double pi =
3.14
;//定義常量pi
file.h標頭檔案進行宣告
extern
const
double pi;//後續只要新增#include的cpp檔案都可使用pi
1.把引用繫結到const物件上稱為常量引用。不能通過常量引用修改所繫結的物件。
2.引用與繫結的型別要一致,但有兩個特例:
(1)常量引用可繫結到非常量物件
int i=1;
const
int&r=i;
//正確:允許常量引用繫結非常量物件
(2)非常量引用不能繫結到常量物件
const
int c=
1024
;int
&r=c;
//錯誤:非常量引用不能繫結常量物件
1.常量物件只能用常量指標(前後型別一致)
const
double pi=
3.14
;double
*ptr=pi;
//錯誤:ptr是乙個普通指標
const
double
*ptr1=pi;
//正確
2.常量指標必須初始化,且初始化完成不能在改變指向,但可以修改值
為了便於理解,舉例如下:
int a=0;
int*
const p=
&a;//常量指標p將一直指向a,不能修改其指向,但a的值可以修改
const
double pi=
3.14
;const
double
*const ptr=
π//ptr自己的指向以及pi的值都不允許修改
如何讀懂一條包含多個符號語句?例如const double *const ptr=π
中的ptr怎麼理解?方法是從右向左讀:
1.從右向左,離變數名
ptr
最近的符號是const
,因此ptr
首先是乙個常量物件,該物件型別由其餘部分決定;2.繼續向右讀,下乙個符號是
*
指標,表明ptr
是乙個常量指標;3.下乙個符號是
double
,表明ptr
是乙個指向雙精度浮點型的常量指標;4.最後是
const
,因此ptr
是乙個常量指標,它指向的是雙精度浮點型常量,即ptr是乙個指向雙精度浮點型常量的常量指標;
c 引用 指標 const
1 const定義常量 const int valuename value 2 const與指標 指標常量 int const p 指標的位址不允許修改,值可以修改 常量指標 const int p 值不能修改,位址可以修改 指向常量的指標常量 const int const p 3 const與函...
引用,const引用,指標
引用,const引用,指標 一 引用 1 定義 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。2 宣告方法 型別 引用變數名 已定義過的變數名。3 特點 l 乙個變數可以取多個別名 但引用與其所代表的變數共享同一記憶體空間 模擬 人的別名 l 引用必須初始化,且必須宣告引用的型別...
指標和引用,const 指標和const 引用
指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...