C 學習筆記(const)

2021-08-17 08:30:35 字數 1406 閱讀 8460

c++中,經常可以看到用const修飾變數,修飾函式。現在,我們對const進行總結(不必死記硬背)

1、const修飾變數: int a=3;//定義整型變數a

const int a=3;//表明a為常變數,a的值不能夠被改變

2、const修飾引用

const int &b=a;//b與a的位址相同,不能通過b來改變a的值,例如:b=5(錯誤)

int const &b=a;//b與a的位址相同,不能通過b來改變a的值,例如:b=5(錯誤)

3、const修飾指標

const int *p=&a;//不能通過指標來改變a的值,例如:*p=5(錯誤)

int  const *p=&a;//不能通過指標來改變a的值,例如:*p=5(錯誤)

int *const p=&a;//p的指向不能改變,例如:int b;p=&b(錯誤)

const int *const p=&a// 不能通過指標來改變a的值,同時p的指向不能改變;

const的意思是常量,因此,我們可以理解為「不變的」,上述情況,我們可以&或者*為界,看const距離誰近,const就修飾誰。例如:int *const p=&a;const距離p近,修飾指標p,表明指標p不能改變其指向。

4、const修飾函式(假設定義test類,資料成員為data,成員函式為void show(test *const p))

void show(test *const p)const

表明該函式為常函式,在程式內部該函式相當於void show(test *const this,const test *const p),就是將函式外面的const拿到了第二個引數的前面(成員函式都預設含有第乙個引數,即this指標)。該函式的引數表明:不能在函式內部更改指標p的指向,同時,也不能在函式內部通過指標p修改傳遞給形參的資料。下面定義test類,討論常函式和普通的成員函式之間的相互呼叫問題:

#include

using namespace std;

class test

void show()const

void caculate()

private:

int data;

};int main()

現在我們在show()函式的內部呼叫caculate()會提示有錯誤,原因是show( )函式是常函式,函式實際為show(const test *const this),因此,此函式不希望修改data資料,但是caculate( )函式可能會修改data資料(本來不可以修改,但是最後可能會被修改),因此,會報錯。相反,在caculate( )函式內部呼叫show( )函式,不會報錯,原因在於caculate( test *const this)表明可以修改data資料,而show(const test *const this)表明不可以修改data資料(可以修改或不修改,但是最後保證其不修改)。

C 學習筆記 const

const在c 中有著大量的運用,深刻理解const有助於進一步理解c int main 初級理解 const是定義常量 const意味著唯讀 含義 const好處 int main 通過以上程式可以改變a的值,不符合預期 c 編譯器對const常量的處理 當碰見常量宣告時,在符號表中放入常量 問題...

C 學習筆記1 const引用

const引用可以用不同型別的物件初始化 只要能從一種型別轉換到另一種型別即可 也可以是不可定址的值,如文字常量,例如 同樣的初始化對於非const引用是不合法的,將導致編譯錯誤。原因如下。引用在內部存放的是乙個物件的位址,它是該物件的別名。對於不可定址的值,如文字常量,以及不同型別的物件,編譯器為...

C 學習筆記 一 記憶體 引用 const

使用new申請記憶體,使用delete釋放記憶體。c int p new int delete p int arr new int 100 申請塊記憶體 delete arr 如果寫成delete arr,則只能刪除第乙個記憶體,後面99個記憶體還在。c語言 void malloc size t s...