c 關鍵字const使用方法總結

2021-10-02 02:48:04 字數 3519 閱讀 2810

const:大致意思是「我承諾不改變這個值」。主要用於說明介面,這樣在把變數傳入函式時就不必擔心變數會在函式內被改變。編譯器負責確認並執行const的承諾。或者可以說在當前作用域內值不發生改變

const的語法雖然變化多端,但並不高深莫測,如果乙個被指物是常量,const可以寫在型別之前,也可以寫在型別之後,這兩種寫法的意義是相同的。

//下面兩行**是等同的

const

int a =5;

//設定a為常量5

intconst b =6;

//設定b為常量6

當const與指標一起使用時,又有些不同

char p=

"hello"

;char

* p1 = p;

//非常量指標,非常量資料

const

char

* p1 = p;

//非常量指標,常量資料

char

const

* p1 = p;

//同上

char

*const p1 = p;

//常量指標,非常量資料

const

char

*const p1 = p;

//常量指標,常量資料

在程式中應盡量使用常量代替數值,不但可以方便閱讀,也方便了程式的維護。程式中在多個地方使用同乙個常量,則需要改變該常量時,只需要修改乙個符號即可。

#define pi 3.14
#define 是預處理方法,其不被視為語言的一部分。在編譯器處理源**時,其定義的pi就已經被3.14替代,於是當你運用此常量但獲得乙個編譯錯誤資訊時,可能會帶來困惑,因為這個錯誤資訊也許會提到3.14,而不是pi

使用const可以解決這個問題:

const

double pi =

3.14

;

pi會作為乙個語言被編譯器看到,因此當出現錯誤時,其會被編譯器指出。

指標和const的常用用法

int age =13;

const

int* pt =

&age;

//表示不能通過 *pt 改變age的值

cout <<

*pt << endl;

//輸出結果應該為13

//*pt = 14; //是無效的,在宣告pt時,const的作用就是防止使用*pt改變其所指向的值

age =14;

//有效

cout <<

*pt << endl;

//輸出結果應該為14

int year =

2020

;pt =

&year;

//有效 此時pt是year的位址,但是此時不能使用*pt改變year的值

cout <<

*pt << endl;

//輸出結果應該為2020

int age =13;

int*

const pt =

&age;

//表示指標pt的值只能是age的地

cout <<

*pt << endl;

//輸出結果為13

*pt =14;

//是有效的

cout <<

*pt << endl;

//輸出結果為14

int year =

2020

;pt =

&year;

//無效 pt的值是不能改變的

當函式的引數是為了進行值傳遞不對其進行修改時,並且其為較大的結構,類物件,或者陣列時,我們通常使用const引用或者const指標,其目的是為了提高程式的效率,這樣可以節省複製結構所需要的時間和空間。

void

fun(

const a *in)

;//修飾指標型傳入引數,表示在函式內部in指向的值是不能被修改的

void

fun(

const a &in)

;//修飾引用型傳入引數,表示in引用的值在函式內部是不能被修改的

當使用const修飾函式的傳入引數時,可以使函式能夠處理const 和非const引數,否則只能接受非const資料。

可以阻止使用者修改返回值。返回值也要相應的賦給乙個常量或常指標。多用於操作符過載。

const rational operator

* (const rational& lhs,const rational& rhs)

;

當我們為了改善c++程式效率時,使用用法3傳遞類物件時,物件會被宣告成const物件,一旦乙個物件被宣告成為乙個const物件後,那麼就只能訪問它的const成員函式,不能訪問非const函式(而非const物件可以訪問任意的成員函式,包括const成員函式)

const成員函式的好處:

第一,它們使class介面比較容易被理解。這是因為,得知哪個函式可以改動物件內容而哪個函式不行。

第二,它們使「操作const物件」成為可能。

例:

class

point

intgetx()

const

intgety()

const

void

setx

(int x)

private

:int x, y;};

void

display

(const point p1)

在常量成員函式內,是不允許去改變類內的資料成員的值。

例:

class

point

intgetx()

const

private

:int x, y;

};

const 修飾乙個陣列時,該陣列內的值是不可以被改變的;

const

int array[2]

=;//宣告array為const陣列

array[0]

=3;//無效,不能修改陣列內的值

int* p = array;

//無效,array的值不能賦值給非const型實體

const修飾引用時,表示不能通過這個引用改變原來的資料

int age =10;

const

int& ref = age;

//宣告ref為乙個const引用

ref =9;

//無效

age =9;

//有效

const關鍵字總結c

const成員函式只能呼叫const成員函式 const成員函式中不能改變成員變數的值,但是可以訪問所有變數 非const函式可以呼叫const函式 因為非const可能會修改屬性值,所以在const物件情況下,非const方法不能被呼叫,只能呼叫const方法 const函式可被非const過載,...

const關鍵字總結

這裡會呼叫string類的預設建構函式初始化陣列元素。const int cur 這裡的cur是乙個指向int型別的const物件的指標,const先頂了cur指向的物件的型別,而並非cur本身,所以cur不是const的 const double cur const double pur 1.2 ...

const關鍵字總結

被const修飾的變數是不能改變的 const修飾變數時,必須在宣告變數的同時給出初始化 類中的const成員變數不一樣 定義為變數本身是乙個常量,因此對一切的內建型別常量而言,所有的const都是頂層const 對指標來說,常量指標是頂層const,對於引用則沒有頂層const的概念。只在指標和引...