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

2021-05-14 08:36:48 字數 4119 閱讀 2529

1樓:匿名使用者

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

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

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

2樓:

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

c++成員函式的行內函數能否在類外宣告?

3樓:匿名使用者

我想你把函式的定義和宣告兩個概念混淆了,可以定義在外面,但是宣告肯定是在類內啊。

// 標頭檔案

class a

// 定義檔案

inline void a::foo(int x, int y) // 表明是一個行內函數

// 若是定義在類內,就是隱式內聯了,比如class a}

4樓:

可以,不過類內必須要有函式宣告

mfc自動生成的文件/檢視程式就有這樣的函式,一般類的成員函式,寫在類外的部分稱為定義,即函式的實現**!只要#include相應的標頭檔案,類的公開成員就可以使用了!私有成員,類自己和友元可用,保護成員子類也可用!

宣告一個行內函數以後,在類裡面定義他跟在類外面定義他有區別嗎?是不是在外面定義會減少程式體積?

5樓:匿名使用者

請採納我的答案吧, 多謝了,兄弟

定義位於類宣告中的函式都將自動成為行內函數,而如果在類宣告外定義函式時也想成為行內函數,則需要使用關鍵字inline

由於行內函數的特殊性,必須保證每一個使用它的檔案都必須包含它的定義,所以:

1. 如果在類外面定義, 那麼在其他使用該行內函數的檔案中也必須要定義

2. 如果在類裡面定義, 則只需要將其放在定義類的標頭檔案中 即可。

類a裡面了宣告瞭一個成員函式在類外定義為行內函數fun然後宣告物件b,可以通過b.fun來呼叫這個行內函數嗎

6樓:匿名使用者

內聯函:行內函數必須是和函式體申明在一起,才有效。在類的內部定義了函式體的函式,被預設為是行內函數。而不管你是否有inline關鍵字。

7樓:匿名使用者

可以的,

不過要注意,在類外定義行內函數,必須將該定義與類定義放在同一個檔案內,謹記

建構函式在類中或類外定義是不是都是行內函數????

8樓:匿名使用者

不一定,要看編譯器如何解讀這段**。但一般來說都是行內函數。

9樓:匿名使用者

和其他成員函式一樣,只有在類中才會自動內聯,在類外時可能由於編譯器的優化被內聯。

10樓:匿名使用者

依賴於編譯器的優化方式,可能根據建構函式的位置和複雜程度而處理方式不一樣。

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

11樓:匿名使用者

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

12樓:手機使用者

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

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

13樓:扶範西門靈秀

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

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

14樓:匿名使用者

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

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

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

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

c++中在類內部的成員函式,如果連宣告帶定義一下寫完了,那這個就會是行內函數嗎? 如果是,那就必須在類 5

15樓:匿名使用者

行內函數並不真的會被強制。對於現在的編譯器,內聯的目的主要是為了可以直接在標頭檔案裡寫函式定義。預設情況下編譯器判斷一個函式呼叫要不要內聯的時候根本不會考慮這個函式是不是行內函數。

16樓:匿名使用者

不是必須帶有關鍵字 inline才可以!

它與普通函式的區別,就是說它是包含在類裡面的,雖然在外面定義,如果沒有inline關鍵字,那就是在外部的函式,不屬於這個類

17樓:匿名使用者

是這樣吧?

成員函式的實現部分,如果寫在類裡面,就是內聯的; 如果寫在類外,並且想是內聯的,那需要帶inline

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

18樓:匿名使用者

行內函數

在類宣告內定義行內函數

行內函數

在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++參考大全(第四版)

19樓:莫謹瑜

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

20樓:captainz鈥唊

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

c成員函式的行內函數能否在類外宣告

我想你把函式的定義和宣告兩個概念混淆了,可以定義在外面,但是宣告肯定是在類內啊。標頭檔案 class a 定義檔案 inline void a foo int x,int y 表明是一個行內函數 若是定義在類內,就是隱式內聯了,比如class a 可以,不過類內必須要有函式宣告 mfc自動生成的文件...

c在父類宣告純虛擬函式怎樣在父類建構函式

不能,就算中bai轉一下也不行,du因為這個zhi時候還虛擬函式表還沒有dao改寫,也就是說版純虛函權 數還沒有實現,函式指標指是空的。這是時序的問題。執行之後會報這個錯誤 libc abi.dylib pure virtual function called 1 2417 abort test而且...

什麼是類的成員函式和非成員函式

類有成員變數和成員函式。而函式中,不是任何一個類的成員的函式,就是非成員函式。例如 class a 這個就是成員函式。void f2 這個也是成員函式宣告,其實現在類的外部。void a f2 這個是成員函式的實現。void f3 這個就是非成員函式,它不屬於a,也不屬於任何一起其他的類。類的成員函...