古詩詞大全網 - 四字成語 - const的作用是什麽?

const的作用是什麽?

壹、const int 和int 的區別

1、返回值

const int & 是返回這個數值的壹個常量的引用。

而int 是返回這個數值的壹個拷貝。

int 是進行拷貝構造,而const int & 是返回的引用。拷貝構造更消耗時間,與此同時還用析構函數。因為產生了壹個拷貝,妳就可以輕易地修改拷貝的內容。

2、取指針

const int類型壹旦定義以後就不能修改,int類型是隨時可以修改的。

在取指針方面,const有略復雜的東西,但是常規的、合理的操作不應該涉及到,因為const int是用來保存壹些全局常量的,這些常量在編譯期可以改,在運行期不能改。

聽起來這像宏,其實這確實就是用來取代宏的: #define PI 3.14 const float Pi = 3.14; 如果妳的代碼裏用到了100次PI(宏),妳的代碼中會保存100個3.14這個常數。

鑒於使用常數進行運算的機器代碼很多時候會比使用變量來的長,如果妳換用100次Pi(const float),程序編譯後的機器碼裏就不需要出現100次常量3.14,只要在需要的時候引用存有3.14的常量就行了。

特別在復雜的運算裏,3.14這個常量(其實是無法修改的變量)會被壹直裝載在寄存器裏帶來壹些性能提升。

3、內容

constint* p; //p可變,p指向的內容不可變,int const* p; //p可變,p指向的內容不可變。?int* const p; //p不可變,p指向的內容可變?const int* const p; //p和p指向的內容都不可變。

二、const的作用:

1、可以定義const常量,具有不可變性。?

例如:const int Max=100; Max++會產生錯誤;?

2、便於進行類型檢查,使編譯器對處理內容有更多了解,消除了壹些隱患。

例如: void f(const int i) { .........} 編譯器就會知道i是壹個常量,不允許修改;?

3、可以避免意義模糊的數字出現,同樣可以很方便地進行參數的調整和修改。 同宏定義壹樣,可以做到不變則已,壹變都變!

如1中,如果想修改Max的內容,只需要它修改成:const int Max=you want;即可!

4、可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。 還是上面的例子,如果在函數體內修改了i,編譯器就會報錯;?

例如: void f(const int i) { i=10;//error! }?

5、可以節省空間,避免不必要的內存分配。

擴展資料

當const修飾的是指針類型,那麽指針的值就不能改變,即不能指向其他地址,但是可以通過指針修改其指向地址裏面的值。

當const修飾時指針指向的類型時候,那麽指針被指向其他地址,但是不能通過指針修改指針裏面的值。

1)先從const int i說起。

使用const修飾的i我們稱之為符號常量。即,i不能在其他地方被重新賦值了。註意:const int i與int const i是等價的,相同的,即const與int的位置無所謂。

2)const int *p

看例子:

int i1=30;

int i2=40;

const int *p=&i1;

p=&i2; ?//此處,p可以在任何時候重新賦值壹個新的內存地址。

i2=80; ?//這裏能用*p=80來代替嗎?答案是不能

printf("%d",*p); ?//輸出80

分析:p的值是可以被修改的,即它可以重新指向另壹個地址。但是不能通過*p來修改i2的值。

首先,const修飾的是整個*p(註意,是*p而不是p),所以*p是常量,是不能被賦值的。雖然p所指的i2是變量而不是常量;

其次,p前並沒有用const修飾,所以p是指針變量。能被賦值重新指向另壹個內存地址。

參考資料:

百度百科——const