正確放置inline函式

2021-05-25 17:06:22 字數 849 閱讀 5867

個人感覺用c++寫出的程式再小也小不到**去,不愧是開發大型專案的好手,呵呵。所以用c++寫出的程式一定要有個好的布局,也就是合理的標頭檔案原始檔設定(這是高手說的,哈哈)。前幾天,自己在折騰c++的時候遇到了乙個及其鬱悶的事情——程式寫好了,編譯也通過了,可就是鏈結的時候總報找不到那個函式。整整折騰了我一下午,也無果啊。。。我的程式結構如下:

test.h <------標頭檔案

class     test 

public:

void mytest(void);

test.cpp <-----原始檔

inline void test::mytest(void)

cout << "i am testing" << endl;

另外就是有個main.cpp檔案了,這裡就不說它了。就這麼個布局折騰了我一下午,由於使用的是linux,所以一開始就是用g++在編譯鏈結。自己發現解決不了問題了,就用vc來測試下程式,發現還是報同樣的錯誤(我終於找到了gcc和vc的相同點了,哈哈)。在我一氣之下就把test.cpp檔案的inline關鍵字給刪除了,再除錯的時候,一切的一切都解決了。由此,我就可以肯定程式的結構基本是沒有大的問題的了,問題應該就出現在inline函式上。於是我又嘗試把inline函式移到頭檔案中,問題就這樣莫名其妙的解決了。問題是解決了,可我心中的疑慮還是沒解決,於是檢視《c++ primer》好好理解了下inline函式————內聯函式應該是在編譯階段在函式的呼叫處直接展開,從而降低了函式呼叫的開銷,換得了一定的效率。所以當把內聯函式放到另外乙個原始檔後,呼叫這個內聯函式的原始檔最多只是知道函式的宣告,而不知道具體的定義,所以無法展開,於是就丟擲了「找不到此函式的錯誤」。

ps:inline函式應該放置在標頭檔案中,和對應的類一起。

inline函式 C 內聯函式 inline

inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...

inline 內聯函式

一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...

inline內聯函式

技術類筆試題50 都會問巨集與inline的區別,自己去找找看?1 巨集替換發生在預編譯 2 巨集函式 如果可以這麼叫的話 替換時不會檢查引數,inline函式會檢查 3 巨集一定會發生替換,inline貌似不是強制的,編譯器想不替換也沒關係 4 巨集替換時存在著一些不可避免的陷阱 參見c trap...