C 類的內聯成員函式應放在哪

2022-09-23 13:18:07 字數 1991 閱讀 6240

今天覆習c++ primer的時候,看到了關於c++類的內聯成員函式的放置,應該放在標頭檔案中。那麼這到底是為什麼

呢?僅僅是一種**規範問題還是必須這樣做呢?

下面我就來講講我自己的理解吧。要徹底理解這個問題,首先就要了解下函式的宣告和定義了。我們知道,函式可以

在多處宣告,但只能在乙個地方定義,不然就會出現重定義。大部分函式預設是外部鏈結,而inline函式預設為內部鏈

接。也就是說inline函式只能在本檔案中使用,對其他檔案是不可見的。一般我們使用某個類的時候,都是在檔案中加

上該類的標頭檔案,以便我們可以使用該類的介面。而我們類的成員函式的實現都是放在相應的.cpp檔案中的,而在.h

檔案中宣告。這樣我們便可以通過.**件中的成員函式的宣告找到其定義,繼而使用成員函式了。但如果將inline函式

放在.cpp檔案中,那麼其只對.cpp檔案有效,這樣我們就無法訪問它了。所以我們將其放在類的宣告的標頭檔案中,這

樣通過包含該標頭檔案來使用它。

下面寫個實際的例子來說明一下,我先把內聯函式放到類宣告的標頭檔案中:

[cpp]  

/*test.h*/  

#ifndef test_h  

#define test_h  

#include  

using std::cout;  

using std::endl;  

class test  

inline void print();  

void display (int y);  

private:  

int x;  

};  

void test::print()  

#endif  

[cpp]  

/*test.cpp*/  

#include  

#include "test.h"  

using std::cout;  

using std::endl;  

void test::display(int y)     

[cpp]  

/*main.cpp*/  

#include  

#include "test.h"  

using namespace std;  

int main()     

執行結果正常,下面來看看將內聯函式放到.cpp中去:

[cpp] 

/*test.h*/  

#ifndef test_h  

#define test_h  

#include  

using std::cout;  

using std::endl;  

class test  

inline void print();  

void display (int y);  

private:  

int x;  

};  

#endif  

[cpp]  

/*test.cpp*/  

#include  

#include "test.h"  

using std::cout;  

using std::endl;  

void test::print()  

void test::display(int y)     

測試函式和上面的main.cpp是一樣的。這是出現了錯誤:

error lnk2019: 無法解析的外部符號 "public: void __thiscall test::print(void)" (?print@test@@qaexxz),該符號在函

數 _main 中被引用。如果我將測試函式改為:

[cpp] 

int main()     

那麼執行結果正常。從此可以得出結論:內聯函式放在標頭檔案或者.cpp中都是沒有錯的,但如果我們需要在程式中訪

問它,那麼就必須將其放在標頭檔案中。

c 內聯成員函式

內聯成員函式 類中的成員函式分為一般成員函式和內聯成員函式。把成員函式的 放入類宣告中,這種方式定義的類成員函式就叫內聯成員函式 隱式定義 程式使用內聯成員函式的方式與一般的成員函式的呼叫方式一樣。內聯函式和外聯函式之間的區別在於 定義乙個內聯函式時,編譯器會把內聯函式的 替換到程式中 這樣 效率要...

c ,內聯成員函式

內聯成員函式 有兩程方式實現內聯成員函式 1 在聲名成員函式的同時定義成員函式體 2 宣告成員函式時,在最前面加上inline關鍵字 在定義成員函式時也在最前面加上inline關鍵字 建議inline函式在標頭檔案中宣告,以便被不同檔案使用。同c 注意 內聯函式中如果出現條件或迴圈語句,則不會被真正...

C 實操之內聯成員函式介紹

目錄 在c語言中,我們使用了巨集函式,這是編譯器用來減少執行時間的一種優化技術。那麼問題來了,在c 中,有什麼更好的方法來解決這個問題呢?我們引入了內聯函式,這是編譯器用來減少執行時間的一種優化技術。我們將討論內聯函式的 what,why,when how 內聯函式是c 的乙個增強功能,可以減少程式...