詳解const 用法

2021-09-25 12:30:45 字數 2148 閱讀 9893

1.const的用法:

(1)定義常量

(2)修飾函式的引數

(3)修飾函式的返回值

(4)修飾函式的定義體

1.將限定符宣告為唯讀,修飾普通型別的變數。

在型別前/後加上關鍵字const,該變數必須被初始化,否則編譯錯誤;該變數不能被重新賦值,否則也編譯錯誤。舉例:    

const int i=100;  //ok

const int i; //error

int k=0;

i=k; //error i被定義為乙個常量 不可以再對i進行賦值 其值不允許修改

k=i; //ok 可以將i賦值給b,

接著看下面**:

int main()

(2)值傳遞的const修飾傳遞,一般情況不需要const修飾,因為函式會自動產生臨時變數賦值實參值。

#includeusing namespace std;

void cpf(const int a)

{ cout<(3)而對於自定義資料型別(非內部資料型別)的輸入引數,為了提高速度和效率,應使用「const + 引用傳遞」 代替值傳遞。

例如:將void test(a a)改為 void test(const a &a)

因為函式體內將產生a型別的臨時物件用於複製引數a,而臨時物件的構造、複製、析構過程都將耗費時間;「引用傳遞」只是借用一下引數的別名而已,不需要產生臨時物件。

(4)事實上對於內建型資料型別的輸入引數(如以上例子中的int型別),不要將「值傳遞」的方式改為「引用傳遞」,因為用引用傳遞不會使速度更快。即達不到提高效率的目的,又降低了函式的可理解性。

例如: void fun(int x) 改為  void fun(const int &x)

因為內部資料型別的引數不存在構造,析構的過程,而複製也比較快,「值傳遞」和「引用傳遞」的效率幾乎相當。

3.用const修飾函式的返回值

(1)如果給以 「指標傳遞」 的方式的函式返回值加const修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加const修飾的同型別指標。

例如:函式const char *getstring(void); 

正確的是 :const char *str=getstring();     //寫成 char *str=getstring(); 將出現編譯錯誤

(2)如果函式返回值採用「值傳遞」方式,由於函式會把返回值複製到臨時的外部的儲存單元上,所以加const沒有任何價值。

例如: 不要把函式 int  getlnt(void) 寫成 const int getlnt(void).

(3) 函式返回值採用「引用傳遞」的場合並不多,這種方式一般都只出現在類的賦值函式

4.const修飾指標變數

const修飾指標變數有三種情況:

a: const修飾指標指向的內容,則內容為不可變數

const int *p =8;

//指標指向的內容8 不可改變,簡稱左定值,因為const位於 *號的左邊

b:    const修飾的是指標,則指標為不可變數

int a =8;

int * const p=&a;

*p=9; // ok 對於const指標p 其指向的記憶體位址不能夠被改變,但是其內容可以改變,簡稱 右定向,因為const 位於*號的右邊

int b=7;

p=&b; //no

c: const修飾的是指標和指標指向的內容,則指標和指標指向的內容都是不可變數。

int a=8;

const int * const p=&a;

//const 不僅修飾指標p 還修飾p指向的內容,都已經固定,不可改變

對於a,b,c三種情況,根據const位於 *號位置不同,總結為:「左定值、右定向、const修飾不變數」

const用法詳解

物件導向是c 的重要特性.但是c 在c的基礎上新增加的幾點優化也是很耀眼的 就const直接可以取代c中的 define 以下幾點很重要,學不好後果也也很嚴重 1.const常量,如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安...

const 用法詳解

物件導向是c 的重要特性.但是c 在c的基礎上新增加的幾點優化也是很耀眼的 就const直接可以取代c中的 define 以下幾點很重要,學不好後果也也很嚴重 1.const常量,如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安...

const用法詳解

看 到const 關鍵字,很多人想到的可能是 const 常量,其實關鍵字 const 並不能把變數變成常量!在乙個符號前加上 const 限定符只是表示這個符號 不能被賦值。也就是它的值對於這個符號來說是唯讀的,但它並不能防止通過程式的內部 甚至是外部 的方法來修改這個值 c專家程式設計 p21 ...