我很困惑如何在C++中做內聯函數....C++內聯函數
讓我們說這個函數。會是怎樣變成一個內聯函數
int maximum(int x, int y, int z)
{
int max = x;
if (y > max)
max = y;
if (z > max)
max = z;
return max;
}
我很困惑如何在C++中做內聯函數....C++內聯函數
讓我們說這個函數。會是怎樣變成一個內聯函數
int maximum(int x, int y, int z)
{
int max = x;
if (y > max)
max = y;
if (z > max)
max = z;
return max;
}
正如其他人所說,你可以使用inline
關鍵字來告訴你希望你的函數內聯的編譯器。但inline
關鍵字只是編譯器提示。如果需要或需要,編譯器可以並且會選擇忽略您的請求。
另一種方法是使你的函數的函數模板,往往會被吹出來的直列:
template<class Val>
Val maximum(Val x, Val y, Val z)
{
Val max = x;
if (y > max)
max = y;
if (z > max)
max = z;
return max;
}
功能模板不一定是內嵌展開的。 – sbi 2010-04-29 16:52:30
Niether是'inline'函數。這只是一種替代方法。 – 2010-04-29 16:55:13
澄清措辭。 – 2010-04-29 16:55:50
要發佈尼爾斯答案爲實際答案:
inline int maximum(int x, int y, int z)
....
inline
只是告訴你要到處複製的功能代碼是refernece編譯器,它使代碼更快一些(沒有函數調用開銷),但更大(代碼被複制)。 This page is more in depth.
而且編譯器並不需要實際內聯它,如果它不'我覺得很喜歡它。所以它可能會或可能不會幫助。 – 2010-04-29 16:56:42
如果該函數定義出現在class {}
定義中,則它已自動內聯。
否則,正如別人所說,把inline
盈方。
爲了把它變成你需要做兩件事情的內聯函數:內聯用關鍵字inline
爲了使功能內嵌使用inline關鍵字:
inline int maximum(int x, int y, int z) // note the inline keyword
{
int max = x;
if (y > max)
max = y;
if (z > max)
max = z;
return max;
}
如果函數是一個類/結構中的一員,然後簡單地定義它裏面的類(如並列到外面)使得它一致。
假設你有電話:
int f = maximum(3, 4, 5)
編譯器可能會調用擴展到類似:
int max = x;
if (y > max)
max = y;
if (z > max)
max = z;
int z = max;
有一些開銷來調用一個函數,所以內聯函數給您帶來的便利函數以及C宏的性能。但這並不是說你應該總是使用它們,在大多數情況下,編譯器會更好地決定何時需要這樣的優化,甚至可能不會滿足您的請求。
你可以閱讀更多關於內聯函數和如何(何時)在C++ FAQ Lite使用它們,這GotW
PUT「內聯」函數定義的前面。 – 2010-04-29 16:36:06
您還必須將函數定義放在標題中(或者使其在每個翻譯單元中都可用)。 – 2010-04-29 16:43:09
請記住,「inline」關鍵字通常對函數是否內聯無效,使用任何合理的現代編譯器,只要所有的定義是相同的(例如,如果它是「內聯」的,你可以在多個頭文件中定義它),那麼它將允許你在多個地方定義函數。 – 2010-04-29 16:44:35