我想我知道什麼內嵌關鍵字(看起來我沒有),但與今天的編譯器(Visual Studio 2012的C++編譯器在我的情況),它是由編譯器或編譯器忽視它和內嵌其認爲好的方法?它有助於將方法標記爲在C++中內聯嗎?
回答
inline
關鍵字與內聯無關。它實際上意味着:該函數的多個定義可以出現在同一程序中的不同翻譯單元中,而不會違反一個定義規則。
僅使用它的是,即,如果你在報頭中定義的功能,然後將其標記爲inline
(使得多個翻譯單位包括所述報頭,從而生成所述功能可連接在一起)。
是的,但前提是該方法是在類之外的頭部定義的。 – 2013-05-03 18:07:34
@ScottJones:在類中定義的成員函數隱式地作爲模板函數(從ODR的角度來看)是'inline'。 – 2013-05-03 18:09:38
正確 - OP可能不知道... – 2013-05-03 18:11:34
您提到您使用的是Visual Studio 2012,因此您可以使用某些Microsoft特定的說明符強制您想要的內聯行爲。
通常,編譯器會使用自己的判斷來確定何時應該內聯函數。但是,如果您知道(因爲您具有編譯器無法通過靜態分析源代碼獲得的某些應用程序的上下文或知識),因此確實應該內聯內容並希望覆蓋編譯器的判斷,則可以使用__forceinline
關鍵字。
應當指出的是,有沒有保證特定功能將被內聯,即使使用__forceinline
,雖然如此,它認爲它是不是一個強大的建議編譯器以外的任何不是安全的。
在大多數情況下,最好將決定留給編譯器,如果您想根據運行時行爲進一步優化,請使用類似配置文件引導優化(PGO)的選項,它將選擇如何優化包括哪些內聯函數),基於哪些代碼路徑實際上在運行時最頻繁地被擊中。
- 1. 在C++中內聯私有方法
- 2. JQuery標記它 - 編輯標記內聯
- 3. 爲什麼C#將所有方法和類型標記爲System.Runtime.InteropServices.Charset.Ansi?
- 4. 可能將系統類或方法標記爲在C#中過時了嗎?
- 5. 我可以在Objective-C中內聯靜態類方法嗎?
- 6. 在C++中的內聯throw()方法
- 7. hCard:它可以用於語義標記業務的聯繫方式嗎?
- 8. pimpl中的方法是內聯的嗎?
- 9. C++內聯方法實現
- 10. LLVM是否將Objective-C方法轉換爲內聯函數?
- 11. 爲什麼沒有標準的方式強制內聯在C++中?
- 12. 檢查方法C#中的內聯
- 13. 在使用-O3編譯時將函數標記爲內聯?
- 14. 捕捉所有內聯css和它的html標記
- 15. 用於檢查字符是否爲標記的C#方法
- 16. 私有方法內聯
- 17. 將方法標記爲主線程?
- 18. 有沒有一種方法可以將TokenRegex中的多個標記重新標記爲一個標記?
- 19. Intellij將所有方法標記爲未使用,即使它們已被使用
- 20. 以div標記內容並將其應用於javascript中的內聯樣式
- 21. 在Hibernate中將setter私有標記爲好習慣嗎?
- 22. 將標記的HTML設置爲Tooltipster內容的最佳方法
- 23. 有時F#不會內聯函數,即使它被標記爲「inline」?
- 24. 有沒有辦法在C#中將代碼標記爲非線程安全?
- 25. 在C#中有一個「upto」方法嗎?
- 26. 如何在C#中將標記類標記爲[Serializable]?
- 27. 爲什麼更新聯繫人方法無助於Android的
- 28. 標記所有方法爲「安全」
- 29. 在Git中,有沒有辦法將文件標記爲「純」?
- 30. 有沒有辦法將cookies標記爲HttpOnly在主塔中?
我們是否使用.net?後者是 – VoronoiPotato 2013-05-03 18:04:03
。至少啓用了優化。 – john 2013-05-03 18:04:08
請記住'inline'只是一個_hint_,並不意味着內聯是強制性的。 – 2013-05-03 18:04:55