3 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
有兩種查看方式:
內(nèi)聯(lián)函數(shù)在標(biāo)頭中定義,因?yàn)闉榱藘?nèi)聯(lián)函數(shù)調(diào)用,編譯器必須能夠看到函數(shù)主體。為了使天真的編譯器做到這一點(diǎn),函數(shù)主體必須與調(diào)用位于同一轉(zhuǎn)換單元中。(現(xiàn)代的編譯器可以跨翻譯單元進(jìn)行優(yōu)化,因此即使函數(shù)定義位于單獨(dú)的翻譯單元中,也可以內(nèi)聯(lián)函數(shù)調(diào)用,但是這些優(yōu)化是昂貴的,并不總是啟用的,并且也不一定總是受支持。編譯器)
必須標(biāo)記標(biāo)
inline
頭中定義的函數(shù),因?yàn)榉駝t,包含標(biāo)頭的每個(gè)翻譯單元將包含該函數(shù)的定義,并且鏈接程序?qū)⒈г苟鄠€(gè)定義(違反“一個(gè)定義規(guī)則”)。的inline
關(guān)鍵字抑制此,允許多個(gè)翻譯單元包含(相同)的定義。
這兩種解釋確實(shí)可以歸結(jié)為以下事實(shí):inline
關(guān)鍵字不能完全滿足您的期望。
C ++編譯器可以隨時(shí)隨地應(yīng)用內(nèi)聯(lián)優(yōu)化(將函數(shù)調(diào)用替換為被調(diào)用函數(shù)的主體,以節(jié)省調(diào)用開銷),只要它不會(huì)改變程序的可觀察行為即可。
該inline
關(guān)鍵字使得它更容易讓編譯器應(yīng)用此優(yōu)化,通過允許函數(shù)定義在多個(gè)翻譯單元是可見的,但使用關(guān)鍵字并不意味著編譯器已內(nèi)聯(lián)函數(shù),而不是使用關(guān)鍵字不禁止編譯器內(nèi)聯(lián)函數(shù)。
- 3 回答
- 0 關(guān)注
- 499 瀏覽
添加回答
舉報(bào)