成員函式與內聯函式

2022-08-03 16:09:15 字數 1115 閱讀 6195

11.關於成員函式特徵的下列描述中,______是錯誤的.

成員函式一定是內聯函式   b. 成員函式可以過載

c. 成員函式可以設定預設引數值   d. 成員函式可以是靜態的[a]

[解析] 因為成員函式可以在類體內定義,也可以在類體外定義,所以成員函式不一定都是內聯函式;成員函式可以過載,可以設定引數的預設值,成員函式可以是靜態的。

內聯函式是指在呼叫衣櫃函式時,不把他當作呼叫而處理,而是把這個函式的**直接在呼叫他的函式裡展開的形式,也可以理解為內聯函式就相當於一段**。不需要呼叫,效率就高些。成員函式是類中宣告的函式,屬於類。當然如果在類中定義的成員函式自動變為內聯函式。

成員函式是屬於物件的, 靜態函式才是屬於類的. 如果在類體內定義的函式,則會被編譯器預設為內聯函式, 如果把函式的定義放在外面,且在函式的宣告的時候加上關鍵字inline,則函式變為內聯函式,否則為成員函式.

內聯函式類似於c裡邊的巨集,只是巨集經常有一些不安全因素,比如 巨集定義 add() 是 a+b,呼叫的時候巨集定義直接展開,不做任何的判斷,如果呼叫res = add()*c; 得到的**就是res = a+b*c;不是想要的結果。 

內聯函式可以理解成乙個安全的巨集定義,他就是乙個真正的函式,只是不用壓棧出棧,速度快,而且比巨集定義安全,所以利用 短且頻率 比較高的函式可以寫成內聯函式inline。 

內聯函式在編譯時,會將此內聯函式**直接編譯到呼叫函式之處。減少了一次函式呼叫時的跳轉、資料壓棧等操作。所以相比呼叫行數,內聯函式的執行效率要相對高點。不過也正因為如此,所以最終生成的程式檔案要稍微大點。

1.內聯函式可減少cpu的系統開銷,並且提高整體程式的速度,但當內聯函式很大時,會有相反的作用,因此一般比較小的函式才使用內聯函式。

2.有兩種內聯函式的宣告方法,一種是在函式前使用inline關鍵字;另一種是在類的內部定義函式的**,這樣的函式將自動轉換為內聯函式,而且沒必要將inline放在函式前面。

3.內聯是一種對編譯器的請求,像register說明符一樣。下面這些情況會阻止編譯器服從這項請求.如果函式中包含有迴圈,switch或goto語句,遞迴函式,含有static的函式.

內聯成員函式與過載成員函式

內聯函式機制是為了減少函式呼叫的開銷,編譯器處理對內聯函式的呼叫語句時,是將整個函式的 插入到呼叫語句處。兩種格式 1.inline 成員函式 2.整個函式體出現在類定義內部 例如 class b 第二種格式 void b func1 定義時不用加inline乙個或多個函式,名字相同,但是引數個數或...

內聯成員函式

把成員函式的 放如類定義中。這種方式定義的函式就叫內聯成員函式。程式使用內聯成員函式的方式可以與類外部定義的成員函式的使用方式完全相同。但是,內聯函式和外聯函式之間還是有一點區別的 定義乙個內聯函式時,編譯器會把內聯函式的 替換到程式中。使用非內聯函式時,就不會這樣做。但是我們不能讓所有的函式都內聯...

內聯函式和成員函式區別

內聯函式類似於c裡邊的巨集,只是巨集經常有一些不安全因素,比如 巨集定義 add 是 a b,呼叫的時候巨集定義直接展開,不做任何的判斷,如果呼叫res add c 得到的 就是res a b c 不是想要的結果。內聯函式可以理解成乙個安全的巨集定義,他就是乙個真正的函式,只是不用壓棧出棧,速度快,...