const和static的區別和用法

2021-08-09 22:31:00 字數 1446 閱讀 4770

const關鍵字:

const關鍵字是定義變數之後,其數值便不能更改,比方說:

const week_days=7;

一周有七天,week_day被賦予7之後便不能更改

當const用於指標變數定義時,要注意指向常量的指標和常量指標的區別。用比較形象的例子來描述,指向常量的指標就像乙個針標能動而背景板不能動的轉盤,你可以操作指標來指向別的區域,而背景板(也就是記憶體中的資料)是不能移動的;而常量指標z相當於針標不能動,而可以轉動背景板的轉盤,在這裡,指標可能永遠指向12點方向,而他所指向的內容可以通過背景板的旋轉來改變~(例子可能有不妥當之處,希望大佬能夠指出錯誤)

有了大體的概念,我們很容易判斷下列賦值的正誤

int text=1, _text=2;

const int *ptr1=&text;//指向常量的指標

int* const ptr2=&text;//常量指標

ptr1=&_text;//正確

*ptr1=3;//錯誤

ptr2=&_text;//錯誤

*ptr2=3;//正確

而當const用於類的定義時,類中的資料成員在被初始化後便不能被更改,包括用成員函式對其修改也不行;而對於成員函式來說,有時對資料成員的呼叫並不涉及對其的更改,比方說將資料成員output出來,但c++並不能分辨出成員函式是否對常量資料成員進行改動,所以我們要在成員函式名後加const,以此來對資料成員進行訪問

const引用則是指向const物件的引用,它可以讀取但不能修改被引用物件,並且任何對被引用物件進行賦值的操作都是不合法的。

const int text=1;

int &_text=text;//錯誤,引用不是const型別

const int &_text=text;//正確

static關鍵字:

1,被宣告為靜態變數的變數會儲存在靜態變數區,這也就意味著,在某函式中定義的靜態變數,在函式呼叫結束後,不會被**。

void output()
比如說上面這個函式,在程式執行前,會給靜態變數times賦初值1,以後每次執行output函式,static int times=1這個語句事實上都不會執行;output函式執行1次後,times數值變為2,會繼承給下一次的呼叫。

2,當乙個源程式包含多個原始檔時,被宣告為靜態的全域性變數只能在此原始檔中被使用,與此相對應的,普通的全域性變數對該源程式下的其他原始檔也是可見的。靜態全域性變數可以說是本地的,它的好處是防止該變數在其他原始檔中被改動,造成錯誤。也有人把static的這個作用稱為隱藏。

3,在乙個原始檔中,若函式被宣告為靜態,則該函式與靜態全域性變數一樣,只能在本地使用。好處是不必擔心自己寫的靜態函式會與其他檔案中的函式重名。

const和static的區別

const和static的區別 一 const 1.static 區域性變數 將乙個變數宣告為函式的區域性變數,那麼這個區域性變數在函式執行完成之後不會被釋放,而是繼續保留在記憶體中 2.static 全域性變數 表示乙個變數在當前檔案的全域性內可訪問 3.static 函式 表示乙個函式只能在當前...

c 的const和static區別

const定義的常量在超出其作用域之後其空間會被釋放,而static定義的靜態常量在函式執行後不會釋放其儲存空間。static表示的是靜態的。類的靜態成員函式 靜態成員變數是和類相關的,而不是和類的具體物件相關的。即使沒有具體物件,也能呼叫類的靜態成員函式和成員變數。一般類的靜態函式幾乎就是乙個全域...

static和const的區別和用處

const總結 1.常物件 const 類名 物件名 例如const cdate d1 2008,8,8 d1就是常物件,物件d1中的所有成員的值都不能被修改,定義常物件必須要有初值,不能做左值,如果定義了常物件,則不能呼叫該物件的非const成員函式,只能訪問const成員函式,如果希望成員函式訪...