(1)const的來由
定義一種變數,我們希望防止程式不小心改變變數的值。因此產生了const限定符。
(2)初始化
由於const物件一旦建立就不可以改變,所以const物件必須進行初始化;
只能在const型別的物件上執行不改變內容的操作,其中一種就是初始化。也就是說,即使拿乙個const物件去初始化另乙個const物件也完全沒有問題,因為拷貝乙個物件的值不會改變這個物件。
(3)有效範圍
預設狀態下,const物件僅在檔案內有效
(4)指標和const
a.指向常量的指標
令指標指向常量或非常量,指標本身不能用於改變其所指物件的值。容易想到,必須使用指向常量的指標來存放常量物件的位址。如:
const int num = 624;
int *ptr = &num //錯誤,ptr是普通指標
const int *conptr = num//正確,conptr是指向常量的指標
*conptr = 720;//錯誤,不能用於改變所指物件的值
特別地,雖然常量物件的位址必須使用指向常量的指標,但是指向常量的指標可以指向乙個非常量物件。他們之間並非充要條件。值得注意的是,仍然不能通過指標來改變常量物件的值。
b.const指標
由於指標本身也屬於一種物件,因此可以把指標定義為常量型別,也叫作常量指標。和普通資料型別相同,常量指標必須在宣告的同時初始化,之後它所指向的位址就無法改變。如:
int num = 624;
int *const ptr = # //ptr是常量指標
這裡和指向常量的指標作對比,對於常量指標,指標本身是不可以改變的(即指向乙個位址後就不可改變),但是可以通過指標修改所指位址存的物件的值,這取決於所指物件的型別。對於上例,如果:
*ptr = 720;//可行,num不是常量型別
是完全可以的。
再來看乙個例子:
const double pi = 3.14159;
const double *const p = &pi//p是指向常量的常量指標
判斷const是修飾指標還是所指物件有乙個辦法,即從右向左判斷。上例中,p的左邊是const,說明是常量物件,再讀乙個是*,說明是常量指標;double前的const修飾說明所指物件是常量double型別。可以拿這個方法判斷上面所舉的例子。
(5)const的引用
將引用繫結到
const物件上叫做對常量的引用。另一種說法是「常量引用」。但嚴格來說,由於引用本身不是乙個物件,所以這種說法不嚴謹。和上文中的指標作對比就可以知道,因為指標是乙個物件,所以存在「指向常量的指標」和「常量指標」兩種不同的型別,而引用只有「對常量的引用」一種,只是人們習慣叫做「常量引用」而已,實際上是一樣的。
理解常量引用需要注意以下兩點:
a.常量物件的引用必須是常量引用。
const int bir = 624;
int &zz = bir;//錯誤。非常量引用繫結常量物件
const &smart = bir;//正確。常量引用繫結常量物件
b.常量引用可能繫結乙個非const物件
int day = 720;
int &b = day;//正確,普通的引用
const int &y = day;//正確,常量引用繫結非const物件
b = 624;//正確
y = 96;//錯誤,不可通過常量引用改變繫結物件的值
總之,學習常量引用可以和指向常量的指標對照起來,二者在很多時候是一致的。
(6)一些相關概念
頂層const:指標本身是個常量
底層const:指標所指物件是個常量 頂層
const可以表示任意的物件是常量。底層const只存在於指標和引用等復合型別的基本型別上。用於宣告引用的const都是底層const,因為引用本身不是型別,無法對它進行修飾。
關於const 限定符
很多引用自c primer一書 比如有時候需要將乙個文字中的資料複製到另外乙個文字。我們需要使用緩衝區,緩衝區的大寫我們可以自己來決定比如1024個位元組,這是乙個常量,我們使用bufsize 1024.但是bufersize物件本身是乙個變數。所以我們可以引入const限定符,它將乙個物件轉化為常...
異常,const限定符
異常 1.掌握語句 throw 用於丟擲異常資訊,交出 控制權,一旦丟擲資訊,被catch子句捕獲到異常資訊,的控制權就轉移到對應的子句上了。丟擲多種資料型別。catch捕獲 try 這個語句上執行可能出現異常的 塊,如果有異常,可以搭配throw語句。catch 捕獲異常,搭配try語句使用。in...
const 型別限定符
1.以const關鍵字宣告的物件,其值不能通過賦值或遞增 遞減來修改。例 const int a 限定a的值不能被修改 a 12 不允許 2.在指標中使用const const float pf pf指向乙個float型別的const,建立了pf指向的值不能更改 float const pt pt是...