static 和const關鍵字的用法總結

2021-07-10 18:03:41 字數 1713 閱讀 5378

static關鍵字至少有下列

n個作用:

(1)函式體內

static

變數的作用範圍為該函式體,不同於

auto

變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值; (2

)在模組內的

static

全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問; (3

)在模組內的

static

函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內; (4

)在類中的

static

成員變數屬於整個類所擁有,對類的所有物件只有乙份拷貝; (5

)在類中的

static

成員函式屬於整個類所擁有,這個函式不接收

this

指標,因而只能訪問類的

static

成員變數。

const關鍵字至少有下列

n個作用:

(1)欲阻止乙個變數被改變,可以使用

const

關鍵字。在定義該

const

變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了; (2

)對指標來說,可以指定指標本身為

const

,也可以指定指標所指的資料為

const

,或二者同時指定為

const;

(3)在乙個函式宣告中,

const

可以修飾形參,表明它是乙個輸入引數,在函式內部不能改變其值; (4

)對於類的成員函式,若指定其為

const

型別,則表明其是乙個常函式,不能修改類的

成員變數; (5

)對於類的成員函式,有時候必須指定其返回值為

const

型別,以使得其返回值不為「左值」。

例如:const classa operator*(const classa& a1,const classa& a2);   

operator*的返回結果必須是乙個

const

物件。如果不是,這樣的****也不會編譯出錯:

classa a, b, c;   

(a * b) = c; // 對

a*b的結果賦值

操作(a * b) = c

顯然不符合程式設計者的初衷,也沒有任何意義。

const int *  gr;  指標指向的資料唯讀,指標可以修改

int const *  gr;  指標指向的資料唯讀,指標可以修改

例如銀行的個人賬戶,可以在查訊伺服器上,查詢自己賬戶的餘額,但是不能修改自己的餘額。不過指向自己賬戶的指標是可以修改的,因為允許任何人檢視

int *const  gre;  指標是唯讀的,指標指向的資料可以修改

例如訪問款機,個人用的的指標指向自己的餘額等資料,取錢之後,餘額等資料會改變,但是不可以改變使用者指標,就相當於你不可以進入別人賬戶

const int  * const  g;

int const  * const  t ;

這兩條語句指標和指標所指向的資料都是唯讀的。

//對於銀行的職員來說,無論是使用者還是使用者資料他都沒有許可權修改,只有讀取和統計的許可權。

總結:const 在  *  之前,指標指向的資料唯讀;const在  *  之後,指標唯讀。

關鍵字static和const

static在c語言中的作用 static修飾區域性變數,改變區域性變數的生命週期,但是不改變其作用域,生命週期直到檔案銷毀。static修飾全域性變數,改變全域性變數的連線屬性,只能在本檔案中被使用,使用extern外部宣告也不行。static在c 的作用 宣告為static的類成員,成為類的靜態...

static關鍵字和const關鍵字的作用

static關鍵字至少有下列n個作用 1 函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值 2 在模組內的static全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問 3 在模組內的static函式只可被這...

C C 關鍵字 static 和 const

參考 1.靜態全域性變數和函式 靜態全域性變數 static a 靜態函式 static void myfunc 2.靜態區域性變數 靜態區域性變數 每次呼叫該函式a都會加1,不會被重新初始化為0。void myfunc 3.靜態類成員變數和函式 類 class myclass 定義並初始化靜態成員...