關鍵字知識點總結

2021-10-08 21:55:13 字數 3091 閱讀 9200

一、關鍵字

1、static

全域性靜態變數

在全域性變數前加上關鍵字static,全域性變數就定義成乙個全域性靜態變數.

儲存位置:靜態儲存區,在整個程式執行期間一直存在。

初始化:未經初始化的全域性靜態變數會被自動初始化為0

作用域:全域性靜態變數在宣告他的檔案之外是不可見的,準確地說是從定義之處開始,到檔案結尾。

區域性靜態變數

在區域性變數之前加上關鍵字static,區域性變數就成為乙個區域性靜態變數。

儲存位置:靜態儲存區

初始化:未經初始化的靜態變數會被自動初始化為0

作用域:作用域仍為區域性作用域,當定義它的函式或者語句塊結束的時候,作用域結束。但是當區域性靜態變數離開作用域後,並沒有銷毀,而是仍然駐留在記憶體當中,只不過我們不能再對它進行訪問,直到該函式再次被呼叫,並且值不變;

靜態成員函式

函式的實現使用static修飾,那麼這個函式只可在本cpp內使用,不能被其它cpp使用。

類的靜態成員變數

在類中,靜態成員可以實現多個物件之間的資料共享,並且使用靜態資料成員還不會破壞隱藏的原則,即保證了安全性。因此,靜態成員是類的所有物件中共享的成員,而不是某個物件的成員。對多個物件來說,靜態資料成員只儲存一處,供所有物件共用。在類外通過類名::變數名訪問靜態成員

靜態成員變數必須在類中宣告,類外定義,定義時不用加static關鍵字

類的靜態成員函式

靜態成員函式和靜態成員變數一樣,它們都屬於類的靜態成員,它們都不是物件成員。因此,對靜態成員的引用不需要用物件名。

靜態成員函式的實現中不能直接引用類中說明的非靜態成員,可以引用類中說明的靜態成員(這點非常重要)。呼叫靜態成員函式使用如下格式:《類名》::《靜態成員函式名》(《參數列》)。

靜態成員函式沒有this指標,只能訪問靜態成員,普通成員函式可以訪問靜態和非靜態成員。

2、const

const修飾的基本資料型別的常量,編譯器會把它放到符號表中不分配儲存空間,使它成為乙個編譯期間的值,沒有了記憶體的讀寫操作,提高了效率 。const修飾的物件則需要分配儲存空間,另外對const使用了extern或者&操作符,也會為const常量另外分配空間。

const修飾形參,一般和引用同時使用,傳遞效率高,表示引數物件不能被修改。

對指標來說,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const。

const修飾返回值,返回值不可修改。

const修飾類資料成員,必須在建構函式的初始化列表中初始化。

對於類的成員函式,若指定其為const型別,則表明其是乙個常函式,不能修改類的成員變數。

非const函式中,this是乙個指標常量,指向物件,而const物件中,this是乙個指向常量物件的指標常量。

const成員函式只可以呼叫const成員。

非const成員函式可以呼叫const成員函式和非const成員函式。

3、extern

宣告與定義中

c++支援分離式編譯,該機制允許將程式分割為若干檔案,每個檔案單獨編譯。有些檔案中需要共享變數或者函式之類,為了支援這種特性,c++允許將宣告與定義分開。乙個檔案如果想要使用別處定義的名字,必須包含對那個名字的宣告。

如果只想要宣告,而非定義,在變數名之前新增extern關鍵字,而非顯式地初始化。

extern

int i;

// 宣告i而非定義

int j;

//宣告並定義

extern

int k =1;

//宣告並定義

extern關鍵字主要修飾變數或者函式,表示函式可以跨檔案使用,或者表明變數在其他檔案定義,在此處引用。除此之外,extern還可以用來進行鏈結指定:

當出現extern 「c」時,表示 extern 「c」之後的**按照c語言的規則去編譯;當extern修飾變數或函式時,表示其具有外部鏈結屬性,即其既可以在本模組中使用也可以在其他模組中使用。

4、volatile

不可優化,一種型別修飾符,用它宣告的型別變數不能被某些編譯器位置因素更改,告訴編譯器不對這樣的物件進行優化。

易變,每次訪問必須從記憶體中取值(沒被volatile修飾的變數可能會被編譯器優化,從cpu暫存器取值)。

5、explicit

explicit關鍵字只能用於修飾只有乙個引數的建構函式, 它的作用是防止單引數的建構函式隱式型別轉換,把乙個常量轉換成乙個物件進行賦值。建構函式預設情況下即宣告implicit(隱式),可以把乙個常量賦給乙個物件。

6、friend

友元。使其不受訪問許可權控制的限制。如在1個類中,私有變數外部是不能直接訪問的。可是假如另乙個類或函式要訪問本類的私有變數時,可以把這個函式或類宣告為本類的友元函式或友元類。這樣他們就可以直接訪問本類的私有變數。

7、inline

為了解決一些頻繁呼叫的小函式大量消耗棧空間(棧記憶體)的問題,特別的引入了inline修飾符,表示為內聯函式。

當函式被宣告為內聯函式之後, 編譯器會將其內聯展開, 而不是按通常的函式呼叫機制進行呼叫。

當函式體比較小的時候, 內聯該函式可以令目標**更加高效. 對於訪問函式以及其它函式體比較短, 效能關鍵的函式, 鼓勵使用內聯。

8、#define和const的區別

const 定義的是乙個具有常屬性的變數,#define定義的只是乙個常數沒有型別。

#define定義的常量是在預編譯階段進行替換的,而const定義的具有常屬性的變數是在編譯期間處理確定其值的。

const定義的唯讀變數從彙編角度來看只是給出了對應的記憶體位址,而不是像#define一樣給出的是立即數。

const定義的唯讀變數在程式執行期間只有乙份拷貝(因為它是全域性的唯讀變數,存放在靜態區),而define定義的巨集常量在記憶體中有若干個拷貝。

const不能重定義,#define可以通過#undef取消某個符號的定義再次進行重新定義。

C 知識點之const關鍵字

用於定義常量變數,這樣這個變數在後面就不可以再被修改 const int ivalue 10 ivalue 20 編譯報錯,ivalue不可被修改如果輸入引數採用 指標傳遞 那麼加const 修飾可以防止意外地改動該指標。例如 void stringcopy char strdestination,...

Day4迴圈關鍵字和位運算 知識點總結

continue是關鍵字,只能用在迴圈體中 當執行迴圈體的時候,如果遇到continue,當次迴圈直接結束,馬上進入下次迴圈 遇到continue結束一次迴圈 break是關鍵字,只能在迴圈體中使用 當執行迴圈體的時候,如果遇到break,整個迴圈直接結束 while true 需要重複的操作 if...

C 知識點(4)繼承和多型 sealed關鍵字

多型3.覆蓋 隱藏 4.三者區別 sealed關鍵字 繼承 通過繼承,可以建立新的類,以便重用 擴充套件和修改其他類中定義的行為。被繼承的類稱為 基類 繼承它的類稱為 派生類 限制 類只能被單一繼承,但介面可以被多重繼承。特點 可傳遞。基類中的初始化,由於繼承了基類的成員變數和成員方法,因此父類物件...