const限定符用法整理

2021-07-28 00:17:55 字數 2176 閱讀 6793

(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是...