關於const 限定符的一些概念

2021-05-22 14:27:08 字數 1577 閱讀 3440

1.定義const物件

用乙個變數來代表某乙個常數的方法會出現乙個問題,比如 int size=10; size 的值是可以被修改的,const限定符提供了乙個解決辦法,它把乙個物件轉換成乙個常量 const int size=10; 定義size 為常量,並且初始化為10,並且不能被修改,否則會導致編譯錯誤.這裡需要注意的是因為常量在定義後就不能被修改,所以定義時必須初始化.

2.const 物件預設為檔案的區域性變數

在全域性作用域裡面定義非const 變數時,它在整個程式中都可以訪問。我們可以把乙個非const變數定義在乙個檔案中,假設做了合適的宣告,就可以在另外的檔案中使用這個變數:

//file_1.c

int  size;  //definition

//file_2.c

extern int size;  //use size from file_1

++size;

與其他變數不一樣,除非特別說明,在全域性作用域宣告的const變數是定義在該物件的檔案的區域性變數,此變數只存在於那個檔案,不能被其他檔案所訪問

3.指向const物件的指標

如果指標指向乙個const物件,那麼不允許用指標來改變所指的const值 ,為保證這個特性,c++語言強制要求指向const物件的指標必須具有const特性:

const double *cptr; 這裡的cptr是乙個指向double型別const物件的指標,const指定了cptr所指向的物件型別,而並非cptr本身,也就是說,cptr本身並不是const,在定義的時候不需要對它進行初始化,如果需要的話,允許給cptr重新賦值,使其指向另乙個const物件,但不能通過cptr修改其所指物件的值

把乙個const物件的位址賦給乙個普通的,非const物件的指標也會導致編譯的錯誤 :

const double pi=3.14;

double *ptr=π  //  error:ptr is a plain pointer

const double *cptr=π   // ok:cptr is a pointer to const

允許把非const物件的位址賦給指向const物件的指標

double pi=3.14;//pi is a double

cptr=π    // ok ,but can't change pi through cptr;

在程式中,指向const的指標常用作函式的形參。將形參定義為指向const的指標,以此確保傳遞給函式的實際物件在函式中不因為形參而被修改.

4.const指標

除了指向const物件的指標,c++還提供了const指標---本身的值不能修改:

int size=10;

int *const ptr=&size;// ptr is a constant pointer

ptr是指向int 型物件的const指標,與其他const量一樣,const指標的值不能被修改,這就意味著不能使ptr指向其他物件,任何企圖給const指標賦值的行為都會導致編譯錯誤。指標所指物件的值能否修改完全取決於該物件的型別。

5. 指向const物件的const指標

既不能修改const指標的值,也不能修改const指標指向的const物件的值

關於const 限定符

很多引用自c primer一書 比如有時候需要將乙個文字中的資料複製到另外乙個文字。我們需要使用緩衝區,緩衝區的大寫我們可以自己來決定比如1024個位元組,這是乙個常量,我們使用bufsize 1024.但是bufersize物件本身是乙個變數。所以我們可以引入const限定符,它將乙個物件轉化為常...

C 的const限定符

const限定符總是讓人很頭疼,下面講解一下幾個比較容易混淆的概念 對常量的引用 常量引用 一般情況下,引用的型別要與其所引用的物件的型別一致,其中的例外情況就是,當初始化常量引用時,允許用任意表示式作為初始值,只要改表示式能轉換成引用的型別即可。const int i 1 const int ri...

C 的const限定符

一 const常量 const int a 123 編譯時初始化 const int a get size 執行時初始化 a 111 錯誤,a是常量物件,不能改變了 const int b 錯誤 二 對const和const引用的初始化 初始化常量或常量引用時允許用任意表示式作為初始值,只要該表示式...