2011-03-05 31 views
4

可能重複:
Inline functions in C++是不是內聯過早優化?

現代編譯器是在決定什麼應該內聯比程序員更好,什麼不應該。就像register一樣,不應該內聯函數僅僅是編譯器的工作,並且被認爲是不成熟的優化?

+2

...但您可以將其應用到您的代碼中_邏輯完成後。那麼它不會過早:P – progo 2011-03-05 22:45:28

+0

據我所知,inline關鍵字只被認爲是編譯器的一個提示,編譯器可能決定無視它。 – Kai 2011-03-05 22:48:16

+2

「inline」關鍵字不僅用於內聯函數。實際上,當你考慮它時,根本不是內聯函數! :-) – 2011-03-05 22:48:54

回答

7

inline有雙重含義,一些是未察覺的 - 它允許如果從各個翻譯單元內定義的報頭中的未結合的功能,幷包括它被在一個以上翻譯單元(即定義的函數,則是被迫宣佈它內聯或鏈接器會抱怨雙重定義的符號)。

第二個含義是向編譯器提示此函數可能會從調用者站點內聯機器代碼中獲益。你是對的,現代編譯器/優化器應該能夠獨立解決這個問題。

我的建議是隻在需要時使用inline(第一種情況),並且永遠不要將優化提示傳遞給編譯器。這樣,你的源代碼就解決了這個瘋狂的雙重含義。

3

inline僅與優化切線相關。

如果您需要的一個定義規則的例外情況,您應該選擇將inline應用於函數,如果您不需要,則將其忽略。大多數情況下,您可以依靠編譯器來執行適當的優化,而不管函數是否被聲明爲inline

0

退房這樣的回答:Inlining this function or not?

本質上說,是的,內聯是在這一點上,編譯器的任務。內聯最初是爲了向編譯器表明它應該嘗試而創建的。關鍵字是指示 - 編譯器可以選擇是否將函數內聯。