內聯函式(1)

2021-06-18 04:19:15 字數 1356 閱讀 7153

內聯函式是指在呼叫函式的地方插入函式實現**,節省函式呼叫的開銷。

這是一種用空間換時間的做法。

宣告內聯函式時用inline關鍵字。 在類體內定義的函式預設為內聯函式(建構函式也可以為內聯函式)

要注意,無法獲得內聯函式的位址。

內聯函式,建構函式,靜態成員函式不能為virtual函式

1> 內聯函式

內聯函式是在編譯時期展開,而

虛函式的特性是執行時才動態聯編,

所以兩者矛盾,不能定義內聯函式為虛函式。

用內聯取代巨集:(內聯與巨集的區別)

1.內聯函式在執行時可除錯,而巨集定義不可以;

2.編譯器會對內聯函式的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會; 

3.內聯函式可以訪問類的成員變數,巨集定義則不能; 

4.在類中宣告同時定義的成員函式,自動轉化為內聯函式。

2> 建構函式

建構函式用來建立乙個新的物件,而

虛函式的執行是建立在物件的基礎上

,在建構函式執行時,物件尚未形成,所以不能將建構函式定義為虛函式。

3> 靜態成員函式

靜態成員函式屬於乙個類而非某一物件,沒有this指標,它無法進行物件的判

別。這個可以從兩個角度去理解:

1。virtual意味著在執行時期進行繫結,所以在編譯時刻需確定資訊的不能為virtual

建構函式需在編譯時刻,因為需構造出個物件,才能執行動作。

靜態成員函式不屬於任何乙個物件,編譯時刻確定不存在執行的時候選擇執行哪個的情形。

內聯函式,由於屬於編譯器的建議機制,所以其實可以virtual。

2。virtual意味著派生類可以改寫其動作

派生類的建構函式會先執行基類的建構函式而不是取代基類建構函式,也就是說基類的建構函式可以看作派生類建構函式的組成,所以並不能改寫這個函式。

靜態成員函式不屬於任何乙個物件,所以更不能改寫其動作了。

虛析構函式(virtual destructor)

當你可能通過基類指標刪除派生類物件時,建議使用虛析構函式。虛函式繫結到物件的類的**,而不是指標/引用的類。如果基類有虛析構函式,delete baseptr(基類指標)時,*baseptr 的物件型別的析構函式被呼叫,而不是該指標的型別的析構函式。簡單講,這個類有虛函式就應該有虛析構函式。一旦你在類中加上了乙個虛函式,你就已經需要為每乙個物件支付空間代價(每個物件乙個指標),所以這時使析構函式成為虛擬的通常不會額外付出什麼。

對於那些trivial且沒有子類的類,虛析構函式只會增加開銷,不要使用。

專案1 內聯函式

問題及 檔名稱 test.cpp 作 者 李一波 完成日期 2016年3月31號 版 本 號 v1.0 問題描述 下面設計乙個三角形類,請給出個函式的定義 輸入描述 程式輸出 include includeusing namespace std class inline double getb in...

mysql 內聯函式 Kotlin內聯函式

內聯函式使用關鍵字內聯宣告,內聯函式的使用增強了高階函式的效能。內聯函式告訴編譯器將引數和函式複製到呼叫站點。虛函式或區域性函式不能宣告為內聯。以下是內聯函式內部不支援的一些表示式和宣告 區域性類宣告 內部巢狀類的宣告 函式表示式 宣告區域性函式 區域性可選引數的預設值 讓我們看一下內聯函式的基本示...

C 隨筆1 C 內聯函式

內聯函式的編譯 與起跳程式的 內聯起來,即並非採用跳轉到內聯函式程式段的方式執行內聯函式還是講內聯這個 段插入到上級程式中。這樣一來變可以節省下來跳轉內聯函式所需的時間,從而加快了程式執行的速度,但是同時內聯函式也占用了更多的空間。1 內聯函式的 應該比較短小。占用記憶體過多。2 內聯函式的 執行所...