const使用及問題總結

2021-06-23 02:36:56 字數 2482 閱讀 7235

最近在論壇中回答了乙個別人提出的關於const的問題,就隨著自己的理解答覆了,不久就有朋友引用貼子說我說的有問題。於是乎自己思索思索、翻翻書發現自己理解的確實有問題。好記性不如爛鍵盤,何況記性不好,為了加深理解以及以後查詢,今天就好好總結一下。

定義乙個變數代表乙個常數的方法存在乙個問題:可能被有意或無意的修改。const限定符提供了乙個解決辦法,他把乙個物件轉換成乙個常量。

const int bufsize = 512;

定義bufsize常量並初始化為512.變數bufsize仍然是乙個左值,但是這個左值是不可修改的。

因為常量定義後就不能修改,所以定義時必須初始化。

注意:非const變數預設為extern,要使const變數能夠在其他的檔案中訪問,必須顯示的指定它為extern(定義和宣告的地方都要extern)。

const引用是指向const物件的引用。

const int ival = 1024;

const int & refval = ival;//正確

int &ref2 = ival;//錯誤,將const物件繫結到非const引用

可以讀取但是不能修改refval,因此不能通過使用refval來修改ival。

const物件可以初始化為不同型別的物件或者初始化為右值。

int & r = 42;//錯誤,

const int & x = 42;//正確

同樣的初始化對於非const引用卻是不合法的。觀察將引用繫結到不同型別時所發生的事情,最能理解上述內容:

double dval = 3.14;

const int & ri = dval;

編譯器會把這些**轉換成如下形式的編碼:

int temp = dval;//建立乙個臨時變數,將double型別轉換成int型別

const int & ri = temp;//將ri繫結到這個臨時變數

如果ri不是const,那麼可以給ri賦乙個新值。這樣不會修改dval,而是修改了temp。期望對ri的賦值來修改dval的程式設計師會發現dval並沒有修改。僅允許const引用繫結到需要臨時變數作為媒介來完全繫結過程的值,因為const引用是唯讀的。

非const引用只能繫結到與該引用同型別的物件。const引用則可以繫結到不同但相關的型別的物件或繫結到右值。

3.1指向const物件的指標

如果指標指向const物件,則不允許用指標來改變所指的const值。因此就出現了指向const物件的指標。

const double *cptr;
這裡的cptr是乙個指向double型別const物件的指標,

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

*cptr = 42;//錯誤,*cptr是const的

不能使用void*儲存const物件的位址,必須使用const void*型別的指標儲存const物件的位址。

可以修改const指標所指向的值,即:給這個指標賦值是合法的,而修改指標所指向的物件的內容是非法的。

3.2const指標

除了指向const物件的指標外,c++還提供了const指標---

-指標本身的值不能修改。

int errnumb = 0;

int * const curerr = &errnumb;

從右向左讀:「curerr是指向int型別物件的const指標」。與其它const量一樣,const指標的值不能修改,這就意味著不能使currerr指向其它物件,但是可以改變它所指向的物件的值。任何給const指標賦值的行為都會導致編譯錯誤,

因此const指標必須在定義時初始化。

在普通的非const成員函式中,this的型別是乙個指向類型別的const指標。可以改變this所指向的值,但不能改變this所儲存的位址。在const成員函式中,this的型別是乙個指向const類型別物件的const指標。既不能改變this所指向的值,也不能改變this所儲存的位址。

const成員函式寫法:

void x::func() const
這時const是寫在成員函式後面的。這時的this就既不能改變this所指向的值,也不能改變this所儲存的位址。

const使用總結

const 的主要用法是防止物件再次被修改。下面總結一下const的常見使用情況 這樣這個變數在後面就不可以再被修改。const int val 10 val 20 錯誤,不可被修改如果使用引用傳遞引數或按位址傳遞引數給乙個函式,在這個函式裡這個引數的值若被修改,則函式外部傳進來的變數的值也發生改變...

Const 使用方法總結

const 使用方法總結 const限定符的特點在於 強制最低訪問權原則。用這個原則正確的設計軟體可大大減少除錯時間和不良 並且能夠使程式易於修改和除錯。給函式傳遞的指標有如下四種情況 指向非常量資料的非常量指標 指向非常量資料的常量指標 指向常量資料的非常量指標 指向常量資料的常量指標 1 如果傳...

Const 與 Readonly 使用總結

在以往的開發過程中一直使用const來定義常量,很少注意到readonly的使用,因為總感覺const的使用已經足夠了。而就在這兩天,在閱讀sqlhelper的 時,再次看到了readonly的使用,而且感覺很彆扭。如果按const來說,定義了常量後,常量在使用時是不允許再次改變的。而readonl...