C 中 const 和 static 的總結

2021-08-22 13:13:09 字數 1724 閱讀 9559

一、c++中的const是為了幹什麼

const 的特點和應用場景:

c++中的const 可以定義常量,修飾常變數、類的成員方法、類的成員變數

(1)const用來定義常量,那麼這個常量就不能作為左值被修改,而且必須初使化。

const修飾的常量如果是乙個明確的值,那麼常量在編譯期間會被常量的初始值替換

(2)const可以修飾常變數,常變數不能作為左值被修改,其它性質和普通變數一樣

(3)const可以修飾類的成員方法,被const修飾的成員方法叫 「常成員方法」,在常成員方法中只能

訪問其他成員,不能修改其他成員;普通物件和常物件都可以呼叫常方法,但是常物件

只能呼叫常方法。

(4)const也可以修飾成員變數,使之成為常成員變數,它的初始化必須寫在建構函式的初始化

列表中,否則編譯就要報錯。

const 和 static 的區別

(1)static修飾全域性變數使全域性變數從global符號變成local符號,因此只能當前檔案可見,不參與鏈結過程;

(2)static修飾普通成員變數,使普通成員變數從棧記憶體變成在.data或.bss儲存了,生命週期變長了。

(3)static可以修飾成員變數,成為靜態成員變數,必須在類外初始化,同型別所有物件共享靜態成員變數;

(4)static還可以修飾成員方法,成為靜態成員方法,不依賴物件呼叫,用類作用域呼叫就可以了,

因此在成員方法中,const和static是不能共同來修飾乙個方法的。

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顯然不符合程式設計者的初衷,也沒有任何意義。

C 中 const 和 static 的作用

const 的主要應用如下 const 關鍵字使用的注意點 c 中static關鍵字有三個明顯的作用 const char getchar void char ch getchar error const char ch getchar correct int getcount void const...

深入辨析C 中的static和const

const和static在c 中經常被使用到。簡單地說 const定義乙個類例項化範圍內的常量,而static定義的是類的靜態成員變數是由乙個類的所有例項物件共享的。再仔細說明一下 另外,也存在例外的情況!在stl原始碼剖析中1.9.3中提到的 如果在class中含有const static int...

c 的const和static區別

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