類體外定義成員函式和內聯成員函式有什麼區別

時間 2021-05-07 19:59:28

1樓:匿名使用者

行內函數

在類宣告內定義行內函數

行內函數

在c++中,使用者可以建立實際上不呼叫的短函式,他們的**在每次呼叫的程式行裡得到擴充套件。這個過程類似於使用類似函式的巨集。為使一個函式在程式行進行**擴充套件而不被呼叫,只要在函式前面加上關鍵字inline即可。

例如,在下面的程式,函式max()在行內擴充套件而不被呼叫:

#include

using namespace std;

inline int max(int a, int b)

int main()

行內函數是c++的一個重要補充的原因是,他們能使程式設計師寫出非常有效的**。因為類一般要求幾個經常被執行的介面函式,因此,這些函式的效率在c++中是非常重要的。我們知道,每次呼叫函式時,變元要進棧,各種暫存器內容要儲存;函式返回時,又要恢復他們的內容。

問題是這些指令要佔用時間。但是,如果函式在行內擴充套件,上述那些操作就不存在了。當然,雖然函式行內擴充套件能產生較快的速度,但由於重複編碼會產生較長的**,因此最好只內聯那些能明顯影響程式效能的函式。

inline對編譯器是一種請求,而不是命令。編譯器可以選擇忽略它。還有,一些編譯器不能內聯所有型別的函式。

例如,通常編譯器不能內聯遞迴函式。必須查閱自己的編譯器使用者手冊以瞭解對內聯的限制。如果一個函式不能被內聯,它就被當作一個正常的函式呼叫。

inline關鍵字不是c++的 c子集 的一部分,因此,c89沒有定義它,然而,c99中增加了它。

行內函數可以是類的成員。

class myclass;

inline void myclass::init(int i,int j)

inline void myclass::show()

void show(){cout<

建構函式和解構函式也可以是內聯的。

——————————————————————————————————————————

c++參考大全(第四版)

2樓:莫謹瑜

還是有點區別的,c++提供的行內函數在編譯時與程式中其他**聯在一塊了,就是說編譯器將行內函數的**替換了函式呼叫。行內函數不用像類外定義的其他成員函式一樣調來調去,所以使用行內函數的一個優點是執行速度稍快,但缺點是佔更多的記憶體。因此行內函數適用於一些簡單的**,比如求和,求差等等。

3樓:captainz鈥唊

區別大了,行內函數看著像函式其實編譯後他就不是函式了,他只是內斂的函式體內的部分。所以他沒有函式地址;

c++中怎麼理解類內定義的成員函式就是行內函數?

4樓:匿名使用者

當你的class。public成員函式宣告的時候,只要這個函式體當中不存在switch等迴圈語句的時候,則這個函式體無論是在類的內部還是類的外部,這個成員函式在編譯器看來,都等同於inline 行內函數了。

5樓:手機使用者

好像inline現在確實很少用了,編譯器都越來越智慧了

tenglvjun說的對,編譯器是否把函式編成內聯,它有自己的判斷,並不會因為你寫了inline就一定是內聯.就和register一樣,並不是加了register,編譯器就一定會把變數放到暫存器中

6樓:扶範西門靈秀

在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦~而在類外定義的成員函式就不是行內函數。

c++判斷題 定義在類內的成員函式是行內函數,定義在類體外的函式不能使行內函數

7樓:匿名使用者

錯誤!行內函數的定義如下:

行內函數是使用inline關鍵字宣告的函式,也成內嵌函式,它主要的作用是解決程式的執行效率。

只有inline這個關鍵字包含在函式宣告中, 才是行內函數。 與類沒有任何的關係!

舉例:static inline int max(int a, int b);

c++中怎麼理解類內定義的成員函式就是行內函數? 200

8樓:波多貝羅的巫師

在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦~而在類外定義的成員函式就不是行內函數。

類中宣告的函式是行內函數嗎? 是類內宣告 類外定義啊!

9樓:匿名使用者

在類中定義的成員函式全部預設為行內函數。可以顯示加上 inline 識別符號。或者不加

在類中宣告的成員函式,如果沒加inline。則在類外定義該成員函式時加了inline,該成員函式也為行內函數。

綜上所述:不管是宣告還是定義,只要看見有 inline ,都為內聯

10樓:

可以的,區別是類中您給出了函式體,不但是進行了宣告,而且進行了定義,且這個建構函式是內聯的(inline)。內聯可以讓**執行效率更高,但只限於函式體中**較簡單才適合用內聯,通常區分就看你用不用if,case,while這些控制流,用的話最好還是別直接在類中定義,即:別使用內聯。

C 中類的成員函式定義成static與C中的static的函式有什麼不同

曾聽南 類的靜態成員函式不與任何物件相聯絡,它可以直接訪問類的靜態資料成員,而不能直接訪問類的普通資料成員 即非靜態資料成員 因為普通資料成員只有類的物件存在時才有意義。c中的靜態函式只在本檔案中有效。 血天藍海 如果是靜態函式 static 型別 函式名 形參 這樣的函式 它可以被 類名 函式名 ...

c中怎麼定義類,c 中怎麼定義一個類

using system public class desk 基類desk 設定desk的資訊 public void setinfo int len,int wid,int hei 列印desk的引數資訊 public void showinfo t width t height length,w...

C如何定義類型別的陣列,C 中如何定義類的陣列,以及給他們賦值?

student 學生物件的陣列 liststu new list 學生物件的集合 c 中自定義類陣列和結構陣列的使用 發現很多時候給定的陣列要實現某個邏輯或處理很是麻煩,一維陣列,二維陣列,等等需要經過n多轉換,還不如自己寫一個自定義陣列,既方便又節省時間,以下是類陣列,其實相當於定義了一個實體類一...